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

2024-03-05

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

version: '2'

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

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

echo "Hello World" | nc 127.0.0.1 8800

然后我看到了回声。However:如果我通过 GitLab 运行程序在 docker 容器内运行相同的撰写场景,则会失败。

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

My .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 is:

$ 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

因此,这些端口似乎在负责 docker-compose 服务的 docker 容器内不可用。难道我做错了什么?

I do not希望在主机级别公开端口,而不是我只希望打开端口通过运行构建的 docker 容器,可用于该容器。

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

  ^ Not here        ^ I want port 8800 accessible here 

Edit:此外,如果我将 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

因此它“看到”容器,并且端口映射看起来没问题,但端口实际上并未监听。


容器正在运行“码头主机”在您的例子中,这是支持 Gitlab 构建的另一个容器:

services:
  - docker:dind

如果我没记错的话,它的主机名是docker。所以访问方式如下:

echo "Hello world" | nc docker 8800

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

script:
  - echo $DOCKER_HOST
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法访问在 docker 内创建的 docker-compose 容器 的相关文章

随机推荐

  • 为什么 Docker 容器镜像这么大? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我通过 Fedora 的 Dockerfile 制作了一个简单的镜像 最初 320 MB 添加了Nano 这个1MB大小的微型编辑器
  • Mercurial(我猜还有 Git)与 Dropbox:有什么缺点吗?

    我有一个用于个人项目的 Mercurial 存储库 并且我已经将主存储库存储在我的 Dropbox 中几周了 沿着这条线 http iamthewalr us blog 2009 02 mercurial and dropbox 我明白这也
  • 如何同时发出多个axios请求?

    此时我有一个网页 其中正在发出一长串 Axios POST 调用 现在 请求似乎是并行发送的 JavaScript 在收到结果之前继续发送下一个请求 然而 结果似乎是一一返回的 而不是同时返回的 假设对 PHP 脚本的一次 POST 调用需
  • 如何将浮动操作按钮集成到带有工具栏的线性布局中

    我有以下列表视图 我想向其中添加浮动操作按钮
  • NSWindow 到底什么时候会变成圆角?

    我发现了几个类似的问题 但没有完全相同的问题 有些比有问题的操作系统更旧 有些正在做疯狂的事情 比如完全自定义窗口 我发现没有人提供有关如何使完全普通的窗口正常工作的说明 从 OS X Lion 开始 标准窗口都有圆角 不幸的是 我在我的应
  • 异常:未找到 Jupyter 命令 `jupyter-notebook`,Windows

    因此 在安装 VSCode 和 Python 3 7 4 64 位 之后 我真的很难让 python 交互式 工作 我已经在 VScode 中安装了 Python 扩展jupyter and jupyter lab但我不断收到错误 异常 J
  • PyCharm 社区版中的 中出现意外标记

    我是 PyCharm 的新手 但我逐渐喜欢上了它 我的屏幕上出现红色下划线错误是 意外的令牌 为什么 PyCharm 会显示它 我无法理解 当您没有在 Pycharm 的设置中启用 Django 时 通常会发生这种情况 要解决该问题 在 P
  • ASP.Net:在编辑和删除时从 GridView 获取 DataKey

    我正在使用一个GridView控件数据绑定到List从实用程序方法返回的对象的数量 这GridView控件将其中一列设置为其 DataKey 当一行是Selected 它会触发 Selected 事件处理程序 我可以使用myGridView
  • javascript 检测桌面触摸和鼠标支持

    触控设备应如何区分纯触控设备和带有鼠标的设备 就像今天的一些笔记本电脑 需要在应用程序中给予所有鼠标功能优先级 并且如果运行应用程序的设备仅支持触摸 则需要更改功能 如果触摸设备也有鼠标指针 逻辑建议应用程序应将该设备视为普通桌面 并且也可
  • array.map() 中花括号的含义[重复]

    这个问题在这里已经有答案了 我有一个 map 改变的函数isActive对象的属性值data大批 然而 用大括号包裹它会返回未定义的结果 而用括号包裹它或不包裹它会返回更新后的值 大括号用作箭头函数中的包装器 但它对于 map 的工作方式是
  • zod TypeError:无法读取未定义的属性(读取“_parse”)

    我有一个使用 Zod 的 Vite 库 我想解析配置 我的文件夹结构与配置对象结构类似 index ts文件始终导出其自己目录中的所有文件及其子目录中的所有内容 例如export from subDir 所以根文件导出 整个库 以下设置显示
  • 批处理文件将部分文件名移动到部分文件夹名称字符串

    我有一个充满文件夹的目录 这些文件夹以这种方式命名 ABC L2 0001 2ABC12345 0101 xxxx 我需要将许多以此方式命名的文件移动到与文件的前 9 个字符匹配的文件夹中 2ABC12345 0101 xyxyxyx yx
  • 如何在 MSBuild 中并行运行任务

    除非我严重误解了 MSBuild 否则任务将按照它们在 目标 节点中出现的文档顺序执行 我希望能够指定两个任务 例如 xcopy 任务 可以并行运行 我期待有一个 并行 任务或其他任务 尝试 MSBuild 扩展包中的新并行任务 http
  • 使用 .htaccess 更改 url 中的目录

    我正在尝试更改地址栏中显示的网址mysite com blog wedding hair to mysite com services wedding hair using htaccess 使用以下答案 https stackoverfl
  • 带负值和高度的 CSS 相对定位

    我试图对 DIV 元素进行负向定位 在示例中是 content 但我的问题是 div 的容器 wrapper2 获得了太多高度 实际上是 content 给出的高度 但正如我 我将内容向上移动 我想相应地降低 wrapper2 的高度 在这
  • 删除 MVC 中的浏览器自动完成功能

    我目前正在尝试删除用户浏览器完成的表单自动完成功能 这可能会导致一些关键行为 因为它填充了密码字段 我已经将自动完成属性添加到我的所有文本框字段中 但是当我尝试使用 Firefox 时 它仍然会将我当前的登录信息加载到字段中 有谁知道如何解
  • JScrollPane 未添加到 JTextArea

    我看到了几个类似这个问题的问题 但我无法解决这个问题 我无法得到JScrollPane可见于JTextArea 谁能指出我哪里做错了 谢谢 package experiement import java awt Dimension impo
  • openlayers 策略:ol.loadingstrategy.bbox 不适用于 wfs 功能

    我尝试使用此代码使用 openlayers 4 最大 1000 可视化 wfs 中的地块 但是视图地图的每次移动或缩放时范围不会改变 或者新功能不会加载到图层中 var parcellaireSource new ol source Vec
  • MinGW GCC:“未知转换类型字符'h'”(snprintf)

    好的 我在 Windows 7 上使用 MinGW GCC 4 6 2 编译 C 文件时遇到了一个奇怪的问题 该文件包含以下 C 代码 include
  • 无法访问在 docker 内创建的 docker-compose 容器

    我有一个docker compose yml在端口上启动简单 HTTP 回显服务的文件8800 version 2 services echo server image luisbebop echo server container nam