![](/img/trans.png)
[英]'dotnet ef database update' command gives error: Host 'host.docker.internal' is not allowed to connect to this MySQL server
[英]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.