簡體   English   中英

在谷歌雲構建中的兩個容器之間進行通信

[英]Communicate between two containers in Google cloud build

我在 Google 雲構建中運行我的 CI/CD 管道。 我的應用程序有webwget容器。 我正在嘗試從wget訪問web

雲構建內部使用cloudbuild橋接網絡,同時啟動容器作為步驟。 所以我期待這些步驟使用名稱進行通信。 但它失敗了。

如果我創建自己的 docker bridge netwok,那么它們就會進行通信。

我想知道為什么 cloudbuild 網絡沒有按預期工作。

如果您知道在步驟容器之間建立通信的任何其他方法,請告訴我。

雲構建.yaml

steps:

- name: 'gcr.io/cloud-builders/docker'
  id: Web server
  args: ["run", "-d", "--name", "mani", "manikantanr/hostname_ip"]

- name: 'gcr.io/cloud-builders/wget'
  id: wget web mani:8000
  args: ["-qO-", "http://mani:8000"]

為了了解 cloudbuild 的內部結構,我使用了一些 docker 命令。

調試-cloudbuild.yaml

steps:

- name: 'gcr.io/cloud-builders/docker'
  id: Docker Version
  args: ["version"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker info
  args: ["info"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker volume ls
  args: ["volume", "ls"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker volume inspect homevol
  args: ["volume", "inspect", "homevol"]


- name: 'gcr.io/cloud-builders/docker'
  id: Docker network ls
  args: ["network", "ls"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker network inspect cloudbuild
  args: ["network", "inspect", "cloudbuild"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker ps before
  args: ["container", "ls", "--no-trunc"]

- name: 'gcr.io/cloud-builders/docker'
  id: Web server
  args: ["run", "-d", "--name", "mani", "manikantanr/hostname_ip"]
  # waitFor: ['-']

- name: 'gcr.io/cloud-builders/wget'
  id: wget ipinfo
  args: ["-qO-", "https://ipinfo.io"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker ps after
  args: ["container", "ls", "--no-trunc"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker inspect mani host network
  args: ["inspect", "mani"]

- name: 'gcr.io/cloud-builders/docker'
  id: Docker alpine ifconfig inside container
  args: ["run", "alpine", "ifconfig"]

- name: 'gcr.io/cloud-builders/wget'
  id: wget mani:8000
  args: ["-qO-", "http://mani:8000"]

我在雲構建上設置集成測試時遇到了類似的問題。 我試圖從另一個構建器 (go-builder) 對我的其他容器(通過 docker-compose 社區構建的容器開始)運行集成測試。

無需在 docker-compose.yaml 上指定任何網絡,所有容器都在默認網絡 ( https://docs.docker.com/compose/networking/ ) 上啟動。 在雲構建中,它創建了一個名為cloudbuild_default的新網絡,並將我所有的容器都放在那里。 通過我的 docker-compose.yaml 文件強制所有容器加入cloudbuild網絡,我能夠建立通信並對它們運行測試。

#docker-compose.yaml

networks:
  default:
    external:
      name: cloudbuild

這可能是您的替代配置。 希望能幫助到你

文檔

每個構建步驟都在其容器連接到名為 cloudbuild 的本地 Docker 網絡的情況下運行。 這允許構建步驟相互通信並共享數據。

您可以使用 docker compose 和使用cloudbuild網絡,例如:

#docker-compose.yml
app-workspace:
  ...
  network_mode: cloudbuild
db-mysql:
  ...
  network_mode: cloudbuild
...
networks:
  default:
    external:
      name: cloudbuild

或者,如果您使用的是 docker docker run ,請添加選項--network cloudbuild

之后,您可以按預期與您在上一步中定義的其他服務進行通信。 例如:

#steps
- id: 'Ping to other container'
  name: gcr.io/cloud-builders/curl
  args: ["app-workspace:your-service-port"]

希望這可以幫助。

我做了一個實驗,看起來(無需進行任何特殊設置)您可以使用名稱 step_x(從 0 開始的編號)在構建步驟容器之間進行通信。

例如,如果您有一個 Web 服務器偵聽容器中的端點 /hello(在端口 8081 上)以進行第一個構建步驟 (step_0)。 您可以通過向http://step_0:8081/hello發出請求,從另一個構建步驟容器向該端點發出請求。

暫無
暫無

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

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