繁体   English   中英

将NodeJS Docker容器连接到MySQL Docker容器-docker-compose 3

[英]Connecting NodeJS Docker container to a MySQL Docker container - docker-compose 3

当我尝试在同一台机器上连接两个docker容器时,一个运行node.js服务器 ,另一个运行mysql dbms

我收到以下错误:

(node:32) UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND jdbc:mysql://localhost:3306 jdbc:mysql://localhost:3306:3306

mysql驱动程序连接配置

const connection= mysql.createConnection({
  host: 'jdbc:mysql://topsectiondb:3306',
  user: 'root',
  password: 'rootpass' 
})

docker-compose.yml

version: '3'
services:
  topsection:
    container_name: topsection-server
    restart: always
    build: .
    ports:
      - '7777:7777'
    depends_on: 
      - topsectiondb
    environment:
      - PORT=7777
  topsectiondb:
    container_name: topsectiondb
    image: mysql:8.0.3
    ports:
      - '3306:3306'
    environment:
      - MYSQL_ROOT_PASSWORD=rootpass

Docker文件

FROM node:10

RUN mkdir serviceFolder

WORKDIR /usr/app/

COPY . . 

RUN npm install

EXPOSE 7777

CMD ["npm", "start"]

以获得更完整的堆栈跟踪https://gist.github.com/armouti/877a8b4405330c44e4009ebae3df822c

首先,这里有两个问题。

首先,您需要将docker-compose文件中的docker容器联网在一起。 基本上,每个容器在指定它们所在的网络之前都不知道对方。每个容器可以位于多个网络中,但是如果要连接两个容器,则它们必须位于同一网络中。 https://docs.docker.com/compose/networking/#configure-the-default-network

然后,第二,您不能使用localhost作为URL。 基本上,docker容器是一个隔离的环境,因此它具有自己的“ localhost”,因此当您使用该地址时,它实际上是在尝试连接到nodejs容器上的mysql。 因此,当正确联网后,您将能够使用您在topsectiondb:3306给它们提供的名称连接到mysql容器,并topsectiondb:3306诸如topsectiondb:3306类的内容。 这告诉docker您正在使用网络将一个docker容器连接到另一个,并允许您进行初始连接。 使用Docker compose连接到另一个容器

================================================== =

实际答案:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

基本上,mysql库需要一个主机名,在大多数情况下为localhost,但是当您将容器与docker-compose链接时,请使用容器的别名。 默认端口号是3306

因此: host: "topsectiondb"就足够了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM