【问题标题】:Docker-compose Predis not connection via PHPDocker-compose Predis 不通过 PHP 连接
【发布时间】:2017-07-01 22:11:22
【问题描述】:

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

docker-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 failed: Name or service not known [tcp://redis:6379] in /var/www/htdocs/vendor/predis/predis/src/Connection/ AbstractConnection.php 第 155 行

这是我尝试连接的方式:

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

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

我配置错了什么?

【问题讨论】:

    标签: php nginx docker redis docker-compose


    【解决方案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
    

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2021-02-17
      • 2019-09-08
      • 2020-06-03
      • 1970-01-01
      • 2022-01-03
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多