繁体   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