簡體   English   中英

通過 TCP 將服務連接到 Docker 容器

[英]Connecting service to Docker container through TCP

我在 Docker 容器中使用帶有 NestJS 和微服務(也帶有 NestJS)的 API 網關(目前)。 計划是讓網關與我配置的任何可包含微服務進行通信,但我很難建立這種連接。

  • 如果我在沒有容器的情況下部署兩個項目(網關和微服務),它們可以成功通信;
  • 如果網關在容器內,它將找不到服務,因為它在“localhost”而不是容器主機上尋找它(我稍后會研究這個,即使我不確定如何解決它剛剛);
  • 如果網關部署在本地並且微服務在容器內,我似乎無法與之通信,它總是給我一個超時。

最后一點是我要在這里解決的問題。 經過大量實驗后,我似乎根本無法完成這項工作,而且這看起來是一件非常微不足道的事情。 這是我的代碼:

網關模塊配置:

@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 用於容器外的任何內容。 您應該刪除exposenetworks (在您的服務中和文件末尾)行以及其中嵌套的內容。

至於您的微服務的 docker-compose 也刪除networkexpose線路。

在您的網關中,您應該在從容器調用時將localhost替換為service 在您的服務容器內部也一樣,將localhost替換為gateway 這是因為 docker 有自己的網絡,並且名稱只是您在 docker-compose 文件中的services后設置的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM