首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问在docker中创建的停靠器-组合容器

无法访问在docker中创建的停靠器-组合容器
EN

Stack Overflow用户
提问于 2017-07-29 12:09:30
回答 1查看 1.9K关注 0票数 15

我有一个docker-compose.yml文件,它在端口8800上启动一个简单的HTTP服务。

代码语言:javascript
复制
version: '2'

services:
    echo-server:
        image: luisbebop/echo-server
        container_name: echo-server
        ports:
        - "8800:8800"

超级简单的东西。如果我运行docker-compose up并在本地机器上运行:

代码语言:javascript
复制
echo "Hello World" | nc 127.0.0.1 8800

然后我看到回声。但是,--如果我在一个码头容器中运行同样的组合场景,通过GitLab运行器,它就会失败。

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

我的.gitlab-ci.yml文件看起来如下:

代码语言:javascript
复制
---

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

代码语言:javascript
复制
$ 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

因此,看起来这些端口在码头容器中是不可用的,后者负责码头-组合服务。我做错了什么吗?

不希望在主机级别公开端口,而是希望由运行构建的码头容器打开的端口对该容器可用。

代码语言:javascript
复制
Host (My Mac) -> GitLab CI Container -> Docker Compose Container exposing 8800

  ^ Not here        ^ I want port 8800 accessible here 

编辑:,如果我将一个shell附加到正在运行的CI容器,我会看到:

代码语言:javascript
复制
/ # 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

所以它“看到”了容器,端口映射看起来也不错,但是端口实际上并没有监听。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-31 13:05:11

容器在"docker主机“上运行,在您的例子中,这是支持Gitlab构建的另一个容器:

代码语言:javascript
复制
services:
  - docker:dind

如果我没有错,它的主机名是docker。因此,访问情况如下:

代码语言:javascript
复制
echo "Hello world" | nc docker 8800

要弄清楚什么是docker守护进程的主机,请使用以下命令:

代码语言:javascript
复制
script:
  - echo $DOCKER_HOST
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45389116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档