我正在使用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
我不明白这种差异的原因。
答案 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