【发布时间】:2019-02-02 10:08:34
【问题描述】:
我正在 Google 云构建中运行我的 CI/CD 管道。我的应用程序有 web 和 wget 容器。我正在尝试从wget 联系web
云构建内部使用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"]
为了了解 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"]
【问题讨论】:
-
我认为 Cloud Builder 运行器是非常基础的,它们不打算在内部运行 Web 服务器。你为什么要这样做?需要外部服务的单元测试?
-
通常我对外部服务使用带有模拟的单元测试。但是这次我有一个用例,我必须使用真正的数据库容器进行测试。所以我在分离模式下的新 docker 网络中创建了
Postgres和Oracle Dbs。然后在同一网络中启动web容器与它们通信。 -
我正在寻找一种干净的方法来做到这一点,而无需单独的 docker 网络。我尝试使用
cloudbuild和host网络启动容器。 -
云构建正在启动名称为
steps-x的容器,但其他步骤无法访问这些容器。 -
@OlaVikholt 我使用了 docker-compose。使用
-d启动了一项服务并在另一项服务中执行我的测试。
标签: docker google-cloud-platform google-cloud-build