无法访问在docker中创建的docker-compose容器

时间:2017-07-29 12:09:31

标签: docker docker-compose gitlab-ci gitlab-ci-runner

我有一个/* {{{ proto bool is_null(mixed var) Returns true if variable is null Warning: This function is special-cased by zend_compile.c and so is usually bypassed */ PHP_FUNCTION(is_null) { php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL); } 文件,可以在端口docker-compose.yml上启动一个简单的HTTP回显服务。

8800

超级简单的东西。如果我运行version: '2' services: echo-server: image: luisbebop/echo-server container_name: echo-server ports: - "8800:8800" 并在我的本地计算机上运行:

docker-compose up

然后我看到回声。 但是:如果我在docker容器中运行同一个compose场景,那么它会失败。

我在GitLab试图引起人们对此问题的关注,但效果有限:https://gitlab.com/gitlab-org/gitlab-ce/issues/26566

我的echo "Hello World" | nc 127.0.0.1 8800 文件如下:

.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 的输出是:

gitlab-ci-multi-runner exec docker --docker-privileged docker_test

所以看起来这些端口在docker容器中是不可用的,它负责docker-compose服务。我做错了吗?

不希望希望在主机级别公开端口,而只是希望运行构建的docker容器打开的端口可用于该容器。< / p>

$ 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

修改:此外,如果我将shell附加到正在运行的CI容器,我会看到:

Host (My Mac) -> GitLab CI Container -> Docker Compose Container exposing 8800

  ^ Not here        ^ I want port 8800 accessible here 

所以&#34;看到&#34;容器和端口映射看起来没问题,但端口实际上并没有听。

1 个答案:

答案 0 :(得分:9)

容器正在&#34; docker host&#34; 上运行,在您的情况下,是支持Gitlab构建的另一个容器:

services:
  - docker:dind

如果我没错,其主机名为docker。所以访问:

echo "Hello world" | nc docker 8800

要弄清楚docker守护程序的主机是什么,请使用:

script:
  - echo $DOCKER_HOST