Php Mysql-Docker:连接问题
我的docker-compose.yml如下所示:Php Mysql-Docker:连接问题,php,mysql,docker,docker-compose,Php,Mysql,Docker,Docker Compose,我的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/
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失败:
提供了nodename或servname,或未知'
我尝试过的解决方案:
- 从后端和前端容器Ping到mysql8:docker exec-ti yii前端Ping mysql8(它工作!)
- 手动将每个容器连接到同一网络(my marian net)docker网络连接my marian net mysql8(每个容器相同)
- 我已经连接到mysql容器并在那里测试连接,它可以工作
- 我已经从容器连接到mysql8容器MySQL服务,它可以正常工作
我用的是macOS Mojave。Docker版本19.03问题比我想象的要简单,来自外部容器的“db”服务不存在,因此无法连接 将来,当我从本地运行控制台命令时,我会将数据库连接中的主机更改为使用localhost而不是“db”,或者连接到容器本身并从内部运行它们
感谢@Smankusors的帮助。问题比我想象的要简单,来自外部容器的“db”服务不存在,因此无法连接 将来,当我从本地运行控制台命令时,我会将数据库连接中的主机更改为使用localhost而不是“db”,或者连接到容器本身并从内部运行它们
感谢@Smankusors的帮助。你说,
ping mysql8
就行了。然后您没有尝试使用“mysql8”作为主机名而不是“db”?@Smankusors在连接中您需要使用服务的名称,即“db”。我试过mysql8以防万一,但运气不好。这个问题似乎是我的本地网络和网桥网络之间的问题,那里似乎没有通信。可能是Docker的内部DNS问题,你的Docker版本是什么?你能重新启动你的电脑吗?我正在使用macos Mojave中的docker 19.03。这可能是一个dns问题,但如何测试?哦,是的,顺便说一句,你的yii如何连接到数据库?数据库配置?连接字符串?您说过,ping mysql8
,它可以工作。然后您没有尝试使用“mysql8”作为主机名而不是“db”?@Smankusors在连接中您需要使用服务的名称,即“db”。我试过mysql8以防万一,但运气不好。这个问题似乎是我的本地网络和网桥网络之间的问题,那里似乎没有通信。可能是Docker的内部DNS问题,你的Docker版本是什么?你能重新启动你的电脑吗?我正在使用macos Mojave中的docker 19.03。这可能是一个dns问题,但如何测试?哦,是的,顺便说一句,你的yii如何连接到数据库?数据库配置?连接字符串?