关于Nginx:Docker-compose Predis无法通过PHP连接

Docker-compose Predis not connection via PHP

我正在尝试使用docker(compose)将PHP与Redis连接起来

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '2'
services:
  redis:
    image: redis:3.2.2
  php:
    image: company/php:dev7
    volumes:
      - .:/var/www/
    networks:
      - net
    links:
      - redis
  nginx:
    image: company/nginx
    volumes:
      - .:/var/www/
      - ./docker/nginx_conf:/etc/nginx/conf.d/
    networks:
      - net
    ports:
      - 80:80
networks:
  net:
    driver: bridge

这一切都很好,我能够运行nginx和php。但是,当我尝试与Redit连接时,它告诉我它无法获取地址信息:

Fatal error: Uncaught Predis\\Connection\\ConnectionException: php_network_getaddresses: getaddrinfo failed: Name or service not known [tcp://redis:6379] in /var/www/htdocs/vendor/predis/predis/src/Connection/AbstractConnection.php on line 155

这是我尝试连接的方式:

1
2
3
$client = new \\Predis\\Client([
    'host'   => 'redis',
]);

此外,当我查看redis docker容器并查看/ etc / hosts时,没有redis主机名。至少我在这里期待它,因为我正在尝试将其链接到docker-compose.yml。

我怎么配置错误?


您忘记将Redis容器添加到dev网络。

您可以更新docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '2'
services:
  redis:
    image: redis:3.2.2
    networks:
      - net
  php:
    image: company/php:dev7
    volumes:
      - .:/var/www/
    networks:
      - net
  nginx:
    image: company/nginx
    volumes:
      - .:/var/www/
      - ./docker/nginx_conf:/etc/nginx/conf.d/
    networks:
      - net
    ports:
      - 80:80
networks:
  net:
    driver: bridge

此外,如果定义了bridge网络,则可以省略容器的links

也2.您将永远不会在hosts文件中找到链接的容器IP和主机名。 Docker使用内部DNS服务