#mysql #docker #sequelize.js
#mysql #docker #sequelize.js
Вопрос:
Я должен подключиться как к localhost, так и к 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
Ответ №1:
Когда вы создаете информацию о подключении к базе данных, сначала проверьте переменную среды. Часто бывает полезно установить в качестве резервного значения то, что вы хотели бы видеть в своей повседневной среде разработки.
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:
Ответ №2:
Я думаю, вы пытаетесь подключиться к базе данных mysql, которая работает на хосте, чтобы заставить ее работать, просто добавьте --network host
аргумент в свою команду run. соответствующая документация
После этого лучше всего создать базу данных mysql внутри контейнера и связать ее с вашим приложением