簡體   English   中英

MYSQL:連接到本地主機和主機。docker.internal

[英]MYSQL:Connect to both localhost & host.docker.internal

我必須同時連接到本地主機和 docker。

const db = new Sequelize({
  host : 'host.docker.internal'| process.env.DB_HOST,
  database: process.env.DB_NAME,
  username: process.env.DB_USER,
  password: process.env.DB_PASS,
  dialect: 'mysql'
})

在下面的代碼中,當我運行node app.js時,它會在機器上運行。 但是當我運行docker run -p 3000:3000 [imagehash]它會拋出以下錯誤

ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306

當我跑的時候

const db = new Sequelize({
  host : 'host.docker.internal',
  database: process.env.DB_NAME,
  username: process.env.DB_USER,
  password: process.env.DB_PASS,
  dialect: 'mysql'
})

它在docker run -p 3000:3000 [imagehash]上完美運行

如何完美地同時運行

注意:process.env.DB_HOST = localhost

在構造數據庫連接信息時,首先檢查環境變量。 將回退值設置為您希望它在日常開發環境中的值通常很有用。

const db = new Sequelize({
  host: process.env.DB_HOST || 'localhost',
  ...
});

然后,當您在 Docker 中運行它時,您需要提供該環境變量的值。

# If the database isn't in a container
docker run -e DB_HOST=host.docker.internal -p 3000:3000 myapp
# If the database is in a container; typical Compose setup
version: '3.8'
services:
  app:
    build: .
    environment:
      - DB_HOST=db # matching the name of the service below
    ports:
      - 3000:3000
  db:
    image: mysql
    volumes:
      mysql_data: /var/lib/mysql/data
volumes:
  mysql_data:

我認為您嘗試連接到在主機上運行的 mysql 數據庫,要使其正常工作,只需將-.network host參數添加到您的運行命令。 相關文件

之后,最好的做法是在容器內創建一個 mysql 數據庫並將其與您的應用程序鏈接

暫無
暫無

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

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