#docker #docker-compose
Вопрос:
У меня есть файл docker-compose.yml с двумя службами:
- API NodeJS
- база данных Microsoft mssql
докер-compose.yml:
version: "3.7" services: api: container_name: dev_api environment: - DATABASE_PUBLIC_URL=${DATABASE_URL} # Not used yet build: . restart: always ports: - "4100:4100" networks: - backend depends_on: - db db: image: mcr.microsoft.com/mssql/server:2017-latest restart: always ports: - "1433:1433" environment: ACCEPT_EULA: "Y" SA_PASSWORD: "Abc123**" networks: - backend networks: backend: driver: bridge
когда я запускаю его docker-compose up
, я получаю :
... 021-10-22 14:54:20.77 spid11s The tail of the log for database model is being rewritten to match the new sector size of 4096 bytes. 2048 bytes at offset 75776 in file /var/opt/mssql/data/modellog.ldf will be written. dev_api | App is running at http://localhost:4100 in development mode dev_api | Press CTRL-C to stop dev_api | dev_api | ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) dev_api | at /usr/src/app/node_modules/mssql/lib/tedious/connection-pool.js:71:17 dev_api | at Connection.onConnect (/usr/src/app/node_modules/tedious/lib/connection.js:1043:9) dev_api | at Object.onceWrapper (node:events:510:26) dev_api | at Connection.emit (node:events:390:28) dev_api | at Connection.emit (/usr/src/app/node_modules/tedious/lib/connection.js:1071:18) dev_api | at Connection.socketError (/usr/src/app/node_modules/tedious/lib/connection.js:1669:12) dev_api | at /usr/src/app/node_modules/tedious/lib/connection.js:1428:21 dev_api | at SequentialConnectionStrategy.connect (/usr/src/app/node_modules/tedious/lib/connector.js:129:14) dev_api | at Socket.onError (/usr/src/app/node_modules/tedious/lib/connector.js:149:12) dev_api | at Socket.emit (node:events:390:28) { dev_api | code: 'ESOCKET', dev_api | originalError: ConnectionError: Failed to connect to localhost:1433 - Could not dev_api | } 2021-10-22 14:54:20.80 spid5s Converting database 'msdb' from version 862 to the current version 869. 2 ...
Я могу получить доступ к приложению из htpp://localhost:4100
, но я получаю ошибку, так как я не могу получить доступ к базе данных
Редактировать
В проекте есть файл ormconfig.json
, хост базы данных необходимо изменить.
Ответ №1:
Вы должны настроить свой API для взаимодействия с экземпляром MSSQL в сети Docker Compose с использованием DNS-имен. Как показано ниже
api: container_name: dev_api environment: - DATABASE_PUBLIC_URL=db
Обратите внимание, что ваш экземпляр контейнера MSSQL имеет имя db
.
Когда контейнер пытается получить доступ localhost
, как и любая другая машина, он пытается связаться сам с собой. В вашем случае в контейнере API узла не будет работать MSSQL, поэтому он выйдет из строя.
В сетях Docker Compose используйте имя службы или пользовательское имя хоста для связи с другими контейнерами.