我有兩個服務的 docker-compose.yml 檔案:
- 一個 NodeJs API
- 微軟 mssql 資料庫
docker-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,需要更改資料庫主機。
uj5u.com熱心網友回復:
您應該將 API 配置為使用 DNS 名稱與 Docker Compose 網路中的 MSSQL 實體進行通信。像下面
api:
container_name: dev_api
environment:
- DATABASE_PUBLIC_URL=db
請注意,您的 MSSQL 容器實體名為db。
當一個容器試圖訪問 時localhost,就像任何其他機器試圖與自己通信一樣。在您的情況下,Node API 容器不會在其上運行 MSSQL,因此它將失敗。
在 Docker Compose 網路中,使用服務名稱或自定義主機名與其??他容器通信。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334160.html
