从另一个容器连接到在docker容器中运行的mysql服务器

时间:2019-02-27 09:01:29

标签: node.js docker docker-compose

我有两个容器node.js服务器和mysql服务器 我试图从我的节点应用程序连接到容器上运行的数据库,两个容器都运行良好。 我通过创建一个桥接网络

$ docker network create -d bridge mynetwork

并通过

在此网络中运行我的两个容器
$ docker run -p 32031:3306 --network mynetwork  --name mysql  -e MYSQL_ROOT_PASSWORD=abc123 -d mysql:5.7

$ docker run -p 3000:3000 --network mynetwork  node-server node index.js

我试图与 docker检查mysql 发现的mysql容器的IP连接 这是172.18.0.2和端口32031

哪里出错了并且没有连接。

3 个答案:

答案 0 :(得分:1)

如果您通过IP连接,而IP是从docker inspect command获得的。这意味着您的连接现在为172.18.0.2,端口仍然为3306

从nodejs连接的另一种方式(同一网络中的nodejs和mysql)。连接信息为:

hostname: mysql // container name
port: 3306

答案 1 :(得分:1)

通过网络连接的Docker容器可以在内部进行通信。您的mysql容器内部运行在端口3306上,外部运行在32031上。

尝试通过端口3306连接。应该可以。

答案 2 :(得分:0)

哦,祝你好运。 它现在可以正常工作了,我再次构建了docker映像,并将数据库与我通过检查mysql容器找到的IP以及端口32031连接起来。 运行与$ docker run -p 3000:3000 --network mynetwork node-server node index.js相同的Docker容器

var pool = mysql.createPool({
  connectionLimit : 3,
  host            : '172.18.0.1',
  user            : 'root',
  port            :  32031,
  password        : 'abc123',
  database        : 'mydatabase',
  charset         : 'utf8mb4',
  timezone        : 'PKT',
  timeout         : 4000
});

:)