【发布时间】:2020-03-20 03:57:57
【问题描述】:
我的 docker-compose.yml 看起来像这样:
version: '3.3'
services:
frontend:
build: frontend
container_name: yii-frontend
ports:
- 20080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
networks:
- my-marian-net
backend:
build: backend
container_name: yii-backend
ports:
- 21080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
networks:
- my-marian-net
db:
image: mysql:8.0
container_name: mysql8
command: --user=root --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD=verysecret
- MYSQL_DATABASE=yii2advanced
- MYSQL_USER=yii2advanced
- MYSQL_PASSWORD=secret
ports:
- 6033:3306
networks:
- my-marian-net
networks:
my-marian-net:
driver: bridge
我收到一条错误消息:
'SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败: 提供节点名或服务名,或未知'
我尝试过的解决方案:
从后端和前端容器 Ping 到 mysql8:docker exec -ti yii-frontend ping mysql8(有效!)
手动将每个容器连接到同一个网络(my-marian-net) docker network connect my-marian-net mysql8(每个容器都一样)
我已连接到 mysql 容器并在那里测试连接,它可以正常工作。
我已经从容器连接到 mysql8 容器 MySQL 服务并且它工作正常。
到目前为止,还没有建立联系。在我的代码中,我使用“db”作为主机名,因为我使用的是桥接模式。
在尝试了不同的解决方案后,我已将问题与连接 在码头外,有什么建议吗?
我正在使用 macOS Mojave。 Docker 版本 19.03
【问题讨论】:
-
你说,
ping mysql8它有效。那么你没有尝试使用“mysql8”作为主机名而不是“db”? -
@Smankusors 在连接中你需要使用服务的名字,也就是“db”。我尝试了mysql8以防万一,但没有运气。这个问题似乎是我的本地和桥接网络之间的问题,那里似乎没有通信。
-
这可能是 Docker 的一些内部 DNS 问题,您的 Docker 版本是多少?您可以尝试重新启动计算机吗?
-
我在 macos Mojave 中使用 docker 19.03。这可能是一个 dns 问题,但如何测试?
-
哦,是的,顺便说一句,你的 yii 是如何连接到数据库的?数据库配置?连接字符串?
标签: php mysql docker docker-compose