CircleCI:配置在gcp上托管的Docker容器的测试

时间:2017-05-04 09:22:07

标签: docker google-cloud-platform google-kubernetes-engine circleci

我正在使用CircleCI建立一个持续部署流程,目标是Google容器引擎。我跟this documentation一起关注this example

我被困在这个阶段:

test:
  post:
    - docker run -d -p 3000:3000 -e "SECRET_KEY_BASE=${SECRET_KEY}" eu.gcr.io/${PROJECT_NAME}/${MAIN_CONTAINER_NAME}:latest; sleep 10
    - curl --retry 10 --retry-delay 5 -v http://localhost:3000

这是一个简单的测试,验证我的docker镜像能够回答http请求。我在卷曲之后得到了这个结果:

* Rebuilt URL to: http://localhost:3000/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 3000 failed: Connection refused
* Failed to connect to localhost port 3000: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 3000: Connection refused

curl --retry 10 --retry-delay 5 -v http://localhost:3000 returned exit code 7

如果我在本地shell中尝试它,同样的命令也可以。我在本地得到这个结果:

* Rebuilt URL to: http://localhost:3000/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3000 (#0)
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.51.0
> Accept: */*
>
* Curl_http_done: called premature == 0
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server

我不明白这种差异的原因。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是,首先还要使用一个名称来启动容器:

docker run -d -p 3000:3000 -e "SECRET_KEY_BASE=${SECRET_KEY}" --name ${MAIN_CONTAINER_NAME} eu.gcr.io/${PROJECT_NAME}/${MAIN_CONTAINER_NAME}:latest; sleep 10

然后用这次运行的curl容器替换curl任务:

docker run --network container:${MAIN_CONTAINER_NAME} appropriate/curl --retry 10 --retry-delay 5 -v http://172.17.0.2

其他说明:

--network container:${MAIN_CONTAINER_NAME}-将curl容器附加到MAIN_CONTAINER_NAME容器的网络,默认情况下,其范围为172.17.0.0/16

http://172.17.0.2-由于MAIN_CONTAINER_NAME是该Docker网络中创建的第一个容器,因此它将具有172.17.0.2 IP地址,主机位于.1上,而curl容器位于.3