我正在尝试使用 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/