我尝试使用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中链接它。
我配置错误了什么?
答案 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服务