如何通过网络主机将docker容器上的php脚本与网络主机上的mysql docker容器连接

时间:2020-06-30 15:45:47

标签: php mysql docker

我有:

  • apache + php docker容器(net = host)
  • mongo docker容器(net = host)
  • mysql docker容器(net = host)

在第一个容器中,一个php脚本正在从mysql转储数据库并将已处理的数据迁移到mongodb。 它写入mongodb,但是从脚本调用的mysqldump命令不起作用。 这是mysqldump命令

mysqldump -h 127.0.0.1 -u xxxxx -pxxxxxx 

低于错误

 mysqldump: Got error: 2003: Can't connect to MySQL server on
 '127.0.0.1' (111) when trying to connect

请注意,此脚本可在没有docker的情况下用于生产。 我尝试添加:

--protocol=TCP
--port=3307

还尝试将127.0.0.1更改为mysql(容器名),但也许不能与(net = host)一起使用,但仍然无法使用。

如果我通过php容器执行mysql -h 127.0.0.1 -u xxxx -pxxxx,则可以使用,但是不能通过php脚本执行。

我用来启动容器的命令:

docker run --restart=unless-stopped --net=host --name mysql   -v /opt/mysql/mysql_config:/etc/mysql/conf.d -v /opt/mysql/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxx -d mysql:5.6

docker run --restart=unless-stopped --net=host --name apachephp -d apachephp 

1 个答案:

答案 0 :(得分:1)

第一种选择最好使用docker-compose networking。但是要根据您当前的问题提供解决方案。

使用主机网络,容器无法获取IP,并且链接无法正常工作。

因此,可以通过删除--net host并添加链接来快速修复它,也可以创建docker网络。

如果要从主机连接,可以发布端口。

docker run --restart=unless-stopped  --name mysql   -v /opt/mysql/mysql_config:/etc/mysql/conf.d -v /opt/mysql/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxx -d mysql:5.6

docker run --restart=unless-stopped --link mysql --name apachephp -d apachephp 

现在,您将可以从PHP容器使用以下命令访问MySQL。

mysql -h mysql -uroot -ppassword