Cra*_*tis 12 docker gitlab-ci gitlab-ci-runner docker-compose
我有一个docker-compose.yml文件在端口上启动简单的HTTP回显服务8800.
version: '2'
services:
echo-server:
image: luisbebop/echo-server
container_name: echo-server
ports:
- "8800:8800"
Run Code Online (Sandbox Code Playgroud)
超级简单的东西.如果我docker-compose up在本地计算机上运行并运行:
echo "Hello World" | nc 127.0.0.1 8800
Run Code Online (Sandbox Code Playgroud)
然后我看到回声.但是:如果我在docker容器中运行同一个compose场景,通过GitLab运行器,它会失败.
我试图在GitLab上引起关注这个问题,但结果有限:https://gitlab.com/gitlab-org/gitlab-ce/issues/26566
我的.gitlab-ci.yml文件看起来像:
---
stages:
- docker_test
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
- apk update
- apk add py-pip
- pip install docker-compose
- docker-compose up -d
- sleep 10
- netstat -tulpn
- docker-compose port echo-server 8800
- echo "Hello world" | nc 127.0.0.1 8800
Run Code Online (Sandbox Code Playgroud)
输出gitlab-ci-multi-runner exec docker --docker-privileged docker_test是:
$ netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
$ docker-compose port echo-server 8800
0.0.0.0:8800
$ echo "Hello world" | nc 127.0.0.1 8800
ERROR: Build failed: exit code 1
Run Code Online (Sandbox Code Playgroud)
因此看起来这些端口在docker容器中不可用,它负责docker-compose服务.难道我做错了什么?
我不希望在主机级别暴露端口,而只是希望运行构建的docker容器打开的端口可用于该容器.
Host (My Mac) -> GitLab CI Container -> Docker Compose Container exposing 8800
^ Not here ^ I want port 8800 accessible here
Run Code Online (Sandbox Code Playgroud)
编辑:此外,如果我将shell附加到正在运行的CI容器,我看到:
/ # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab192edf5872 luisbebop/echo-server "/opt/echo-server/..." 2 minutes ago Up About a minute 0.0.0.0:8800->8800/tcp echo-server
/ # netstat -nltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
Run Code Online (Sandbox Code Playgroud)
所以它"看到"容器,并且端口映射看起来没问题,但端口实际上并没有正在侦听.
Rob*_*ert 13
容器正在"docker host"上运行,在您的情况下,这是支持Gitlab构建的另一个容器:
services:
- docker:dind
Run Code Online (Sandbox Code Playgroud)
如果我没错,它的主机名是docker.所以访问如下:
echo "Hello world" | nc docker 8800
Run Code Online (Sandbox Code Playgroud)
要弄清楚docker守护程序的主机是什么,请使用:
script:
- echo $DOCKER_HOST
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |