在Google Cloud构建中的两个容器之间进行通信

Man*_*ran 7 docker google-cloud-platform google-cloud-build

我在Google云构建中运行CI / CD管道。我的应用程序有webwget容器。我正试图webwget

云构建内部使用的cloudbuild网桥网络,同时启动容器作为步骤。因此,我期望这些步骤能够使用名称进行通信。但是它失败了。

如果我创建自己的docker bridge netwok,则他们进行通信。

我想知道为什么cloudbuild网络无法按预期工作。

如果您知道在步骤容器之间建立通信的任何其他方法,请告诉我。

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"]
Run Code Online (Sandbox Code Playgroud)

为了了解cloudbuild的内部结构,我使用了一些docker命令。

debug-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"]
Run Code Online (Sandbox Code Playgroud)

小智 6

我在云构建上设置集成测试时遇到了类似的问题。我试图从另一个构建器(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
Run Code Online (Sandbox Code Playgroud)

这可能是您的替代配置。希望能帮助到你

  • 当 OP 显示使用容器名称时,您是否仍然能够访问您的服务?例如,就在“http://<container-name>:<port>”? (3认同)