Docker-compose不通过PHP连接Predis

时间:2017-02-13 19:46:01

标签: php nginx docker redis docker-compose

我尝试使用docker(撰写)

将PHP与redis连接起来

搬运工-compose.yml

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连接时,它告诉我它无法获取地址信息:

  

致命错误:未捕获Predis \ Connection \ ConnectionException:php_network_getaddresses:getaddrinfo失败:/ var / www / htdocs / vendor / predis / predis / src / Connection /中的名称或服务未知[tcp:// redis:6379]第155行的AbstractConnection.php

这是我尝试连接的方式:

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

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

我配置错误了什么?

1 个答案:

答案 0 :(得分:1)

您忘了将redis容器添加到dev网络。

您可以更新docker-compose.yml

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

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

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