php - Docker-compose Predis 不通过 PHP 连接

标签 php nginx docker redis docker-compose

我正在尝试使用 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 时,它告诉我无法获取地址信息:

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

这是我尝试连接的方式:

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

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

我哪里配置错误了?

最佳答案

您忘记将 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网络,则可以省略容器的链接

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

关于php - Docker-compose Predis 不通过 PHP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212289/

相关文章:

php - 在 PHP 中处理 Solr 结果的理想方式?

php - 如何在CodeIgniter中为403禁止的错误设置自定义页面

php - 检查 mySQL 表中是否存在数组项的最快方法

docker - 如何检查图片:tag exists in gitlab container registry

php - 将日期增加一个月

docker - Nginx Reserve-Proxy https和http连接错误

linux - Nginx 重写规则而不改变 url

Nginx 反向代理到 nextjs 和 react-admin

docker - 运行容器时 docker 工件是否存储在主机 fs 或内存中?

java - 当我构建Docker镜像时,Gradle测试由于UnsupportedClassVersionError而失败-在本地运行良好