我有一个网络:
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
最佳答案
首先,您应该考虑使用networks
代替链接。首先,link
应该很快就会被弃用。其次,当您将 2 个容器放在同一网络上时,docker 会在两个容器的/etc/hosts 中添加一行,用于从容器名称解析 IP。这是为了允许您访问具有其名称的容器。在您的情况下,您可以从代码容器访问 mysql 容器,如下所示
mysql -h 容器_mysql
看this link有关docker网络
的更多详细信息。 This link有关 docker-compose 和网络的更多信息。
关于mysql - docker 。使用mysql从一个容器连接到另一个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932868/