Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从另一个容器连接到docker容器中运行的mysql服务器_Node.js_Docker_Docker Compose - Fatal编程技术网

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

Node.js 从另一个容器连接到docker容器中运行的mysql服务器,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,我有两个container node.js服务器和mysql服务器 两个容器都运行良好,iam正在尝试从我的节点应用程序连接到容器上运行的数据库。 我创建了一个桥接网络 $ docker network create -d bridge mynetwork 并通过运行此网络中的两个容器 $ docker run -p 32031:3306 --network mynetwork --name mysql -e MYSQL_ROOT_PASSWORD=abc123 -d mysql:5.7

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

$ 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 inspect mysql找到的mysql容器的IP 端口号为172.18.0.2,端口号为32031


哪里出了问题,没有连接。

如果您通过IP连接,您可以从
docker inspect命令中获得该IP。这意味着您现在的连接是
172.18.0.2
,端口仍然是
3306

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

hostname: mysql // container name
port: 3306

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

尝试通过端口连接
3306
。它应该有用。

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

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
});

:)

当两个容器都打开时,你能写出docker统计的结果吗?您是否在dockerfile中公开32031端口?只要重新创建容器,该IP地址就会更改;我建议永远不要查找或使用容器内部IP地址。主机名方法更可靠。没错,按容器名命名主机名是正确的方法。还有docker是如何使用的