Контейнер не может подключиться к microsoft sql server в docker-compose

#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 используйте имя службы или пользовательское имя хоста для связи с другими контейнерами.