簡體   English   中英

Node.js 在本地運行應用程序時能夠連接到 MySQL 容器,但在容器中運行應用程序時無法連接

[英]Node.js able to connect to MySQL container when app is ran locally but unable to connect when app is ran in a container

Docker-Compose 文件:

version: '3.8'

networks:
  app-tier:
    driver: bridge


services: 
  mysql_node: 
    image: mysql:5.7
    restart: always
    environment: 
      MYSQL_DATABASE: 'sample_db' 
      MYSQL_USER: 'user' 
      MYSQL_PASSWORD: 'password' 
      MYSQL_ROOT_PASSWORD: 'password'
    ports: 
      - '3306:3306'
    expose: 
      - '3306' 
    volumes:
      - mysql_db:/var/lib/mysql
  app:   
    depends_on:
      - mysql_node
    build: .   
    ports:
      - 3000:3000
    environment:
      - MYSQL_HOST=mysql_node
      - MYSQL_USER=root
      - MYSQL_PASSWORD=password
      - MYSQL_NAME=sample_db
      - MYSQL_PORT=3306
      - MYSQL_HOST_IP=mysql_node
    networks:
      - app-tier   
    volumes:
      - .:/app

volumes:
  mysql_db:

docker 文件:

FROM node:latest

RUN mkdir app

WORKDIR /app

COPY . .  
RUN npm install

EXPOSE 3000

CMD ["node", "app.js"]

源代碼:

const http = require('http')
var mysql = require('mysql');


const hostname = '0.0.0.0'
const port = 3000

console.log(process.env.MYSQL_HOST_IP)
console.log(process.env.MYSQL_PORT)
var con = mysql.createConnection({
  host: "process.env.MYSQL_HOST_IP",
  user: "user",
  password: "password",
  port: 3306
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
}); 

當我運行docker-compose up ,MySQL 容器成功啟動。 但是應用程序退出,錯誤代碼Error: connect ETIMEDOUT

當我通過node app.js在本地運行應用程序時,我最終獲得了成功的“已連接”。 向我的控制台發送消息 output。

我也可以通過 MySQLWorkbench 連接到數據庫。 只是當應用程序作為容器運行時,應用程序無法連接到數據庫。

您已指定應用程序應位於命名網絡上,而數據庫不應。 然后數據庫服務在默認網絡上運行,兩個容器無法相互通信。

我會從應用程序中刪除命名網絡,因為它可能不需要。

  app:   
    depends_on:
      - mysql_node
    build: .   
    ports:
      - 3000:3000
    environment:
      - MYSQL_HOST=mysql_node
      - MYSQL_USER=root
      - MYSQL_PASSWORD=password
      - MYSQL_NAME=sample_db
      - MYSQL_PORT=3306
      - MYSQL_HOST_IP=mysql_node
    volumes:
      - .:/app

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM