我从mysql:5.7映像创建了一个docker容器。
sudo docker run --name mysqltest -e MYSQL_ROOT_PASSWORD=password -v mysql:/var/lib/mysql -d mysql:5.7
然后我创建了一个包含phpunit的php容器
sudo docker run --rm -v $(pwd):/app -w /app phpunit/phpunit:8 phpunit --testdox file.php
在file.php中,我正在尝试通过mysql容器ip作为主机连接mysql容器:
sudo docker inspect mysqltest
但是我仍然收到“拒绝连接”的信息,但是我可以直接通过以下方式连接到mysql容器:
sudo docker exec -it mysqltest mysql -ppassword
请帮助我,我真的很困惑!
答案 0 :(得分:0)
由于您不公开MySQL端口,所以拒绝了该连接,因此主机和其他容器看不到该连接。处理这些情况的正确方法是使用docker-compose和自定义docker网络,但是,以下更改可以用作快速修复:
sudo docker run --name mysqltest -p 3306:3306 --network=host -e MYSQL_ROOT_PASSWORD=password -v mysql:/var/lib/mysql -d mysql:5.7
其次:
sudo docker run --network=host --rm -v $(pwd):/app -w /app phpunit/phpunit:8 phpunit --testdox file.php
-p 3306:3306
告诉Docker将容器内MySQL的默认端口映射到主机的端口3306
。 --network=host
指示docker使用您的本地计算机网络堆栈。您可以通过尝试通过端口3306
上的计算机及其任何客户端应用程序与MySQL进行连接来验证MySQL是否可访问。
请注意,您需要更新应用程序配置以使用localhost
上的MySQL数据库。