mysql - docker 。使用mysql从一个容器连接到另一个容器

标签 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

最佳答案

首先,您应该考虑使用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/

相关文章:

mysql - 将所有列保留在单个表中与按数据类别保留在单独的表中

shell - docker 容器中的 Alpine linux 忽略 shell 脚本参数

docker - 如何从主机访问容器IP

mysql - dockerfile - 无法连接错误

bash - 具有用于执行bash脚本的入口点的Dockerfile

PHP MySQL 查询不返回所有结果

java - Java 中的同步数据库访问

mysql - 从 Oracle VARCHAR2 转换为 MySQL TEXT

php - 将数据插入到不同的表中

postgresql - Golang 使用 SSL 证书连接到 Postgres