泊坞窗。使用mysql从一个容器连接到另一个容器

时间:2017-01-30 09:48:29

标签: mysql docker

我有一个网络:

docker network create -d bridge --subnet 172.25.0.0/16 container_network

我有一个运行mysql的容器。运行命令:

docker run -tid -p 3306:3306 --name container_mysql --network container_network container_mysql

一个包含代码的容器:

docker run -tid -v $(pwd):/code -p 5000:5000 --name container_code --network container_network container_code

我试图从我的容器中使用代码访问mysql DB,但没有任何作用:

mysql -h 172.17.0.1 -P 3306 -u root -p
mysql -h container_mysql -P 3306 -u root -p
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -h 0.0.0.0 -P 3306 -u root -p

第一个命令给了我:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

其他人:

ERROR 2003 (HY000): Can't connect to MySQL server on <host> (111)

任何想法如何实现目标?

修改1 用于Mysql容器的Dockerfile:

FROM ubuntu:16.04
RUN apt-get update
RUN echo "mysql-server mysql-server/root_password password 1234" | debconf-set-selections
RUN echo "mysql-server mysql-server/root_password_again password 1234" | debconf-set-selections
RUN apt-get install mysql-server -y

1 个答案:

答案 0 :(得分:0)

首先,您应该考虑使用networks链接的内容。首先,link应该很快就会被弃用。其次,当您将2个容器放在同一个网络上时,docker会在两个容器的/etc/hosts中添加一行,以便从容器名称中解析IP。这是为了允许您使用其名称访问容器。在您的情况下,您可以从代码容器访问mysql容器,如下所示 mysql -h container_mysql

查看this link了解有关docker networking的更多详情。 This link了解有关docker-compose和网络的更多信息。