我有两个容器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
哪里出错了并且没有连接。
答案 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
});
:)