[英]Connecting service to Docker container through TCP
我在 Docker 容器中使用帶有 NestJS 和微服務(也帶有 NestJS)的 API 網關(目前)。 計划是讓網關與我配置的任何可包含微服務進行通信,但我很難建立這種連接。
最后一點是我要在這里解決的問題。 經過大量實驗后,我似乎根本無法完成這項工作,而且這看起來是一件非常微不足道的事情。 這是我的代碼:
網關模塊配置:
@Module({
imports: [
ClientsModule.register([
{
name: 'trips-svc',
transport: Transport.TCP,
options: {
host: '127.0.0.1',
port: 3002,
},
},
]),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
網關 docker-compose
version: "3.7"
services:
gateway:
build:
context: .
target: development
networks:
- web-gate-net
volumes:
- .:/usr/src/web-gate
- /usr/src/web-gate/node_modules
expose:
- 5001
ports:
- 5001:5001
command: npm run start:dev
restart: "on-failure"
networks:
web-gate-net:
(與此項目相關的 Dockerfile 只是構建應用程序並運行node dist/main
)
微服務 docker-compose
version: "3.7"
services:
service:
build:
context: .
target: development
network: host
volumes:
- .:/usr/src/trips-svc
- /usr/src/trips-svc/node_modules
expose:
- ${SERVICE_PORT}
ports:
- ${SERVICE_PORT}:${SERVICE_PORT}
command: npm run start:dev
restart: "on-failure"
(SERVICE_PORT 在 an.env 文件中設置為 3002)
我已經對這些配置進行了一些實驗(使用expose
關鍵字、 ports
關鍵字,兩者都...),但這是配置原樣。 我對網絡比較陌生,所以我不確定這里出了什么問題,但我很確定這與我的網絡配置有關,而且由於這是一個相當具體的問題,我似乎找不到任何文檔這有幫助。
如果有人可以給我任何指示,我將不勝感激。
謝謝。
如果您希望網關和服務都在不同的容器中運行:
您的網關的 docker-compose ports
行應如下所示: 3002:5001
。 這會將您的 3002 端口公開為 5002 用於容器外的任何內容。 您應該刪除expose
和networks
(在您的服務中和文件末尾)行以及其中嵌套的內容。
至於您的微服務的 docker-compose 也刪除network
並expose
線路。
在您的網關中,您應該在從容器調用時將localhost
替換為service
。 在您的服務容器內部也一樣,將localhost
替換為gateway
。 這是因為 docker 有自己的網絡,並且名稱只是您在 docker-compose 文件中的services
后設置的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.