问题标签 [docker-in-docker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5557 浏览

docker - 在 Alpine Docker 中安装 Docker

我有一个带有经典 Ubuntu 基础映像的 Dockerfile,我正在尝试减小大小。这就是我使用 Alpine 基地的原因。

在我的 Dockerfile 中,我必须安装 Docker,所以 Docker 中的 Docker。

这很好用,我可以docker version在我的容器内运行,至少对于客户端而言。因为对于服务器,我有经典的 Docker 错误说:

我知道在 Ubuntu 中安装 Docker 后我必须运行

但是在阿尔卑斯山呢?我怎样才能避免这个错误?

PS:

我的第一个想法是通过绑定挂载重新使用 Docker 套接字/var/run/docker.sock:/var/run/docker.sock,从而进一步减小图像的大小,因为我不必重新安装 Docker。

但是由于 Dockerfile 中不允许绑定挂载,您知道我的想法是否可行以及如何实现吗?我知道这在 Docker-compose 中是可能的,但我只能使用 Dockerfile。

谢谢

0 投票
1 回答
1773 浏览

docker - 从 gitlab-ci 运行 docker 命令

我有这个 gitlab-ci 文件:

出于某种原因,docker 服务中的 docker 找不到 docker 的二进制文件(docker version命令,第 16 行):

我想知道是否有办法在 gitlab-ci 文件中执行此操作,因为我需要运行 docker 进行测试,是否有一个包含 maven 和 docker 二进制文件的图像,或者我是否必须创建我的自己的码头工人形象。

它必须全部在一个阶段,我不能将它分为两​​个阶段(或者至少我不知道如何在一个阶段在 maven 中编译并在另一个阶段使用 docker 映像运行测试)

谢谢!

0 投票
0 回答
110 浏览

gitlab - Gitlab CI, DIND

尝试使用 gitlab-ci 和 dind 执行作业时,我一直遇到基本的身份验证错误。我似乎无法弄清楚这一点。我可以看到第一次登录工作正常,但是当它尝试进行构建时,它失败了。

具有特权的 Gitlab-Runner

.gitlab-ci 稍后在构建完成后调用发布脚本。

Dockerfile:如果我使用 docker build 工作正常。

这是我在下面遇到的错误。

任何建议都会很棒。谢谢

0 投票
1 回答
1130 浏览

docker - Docker COPY 在 gitlab 管道中新创建的文件失败

我的 Dockerfile 包含一个 COPY 命令,它复制刚刚在管道中创建的目录。

该 COPY 命令失败并出现以下错误:

但是,我知道该目录存在,因为在我构建图像之前,ls $CI_PROJECT_DIR/ui-dist打印bundle.js

跑步者正在使用dind服务。我不确定这是否相关。

编辑:

好的,我尝试删除对 env 变量的引用。即我改变了管道

我已经将 docker 命令更新为

我仍然收到此错误消息:

0 投票
0 回答
1188 浏览

docker - 为什么多阶段 docker build 卡在“COPY --from=builder ...”

上下文如下:

  • 詹金斯
  • Kubernetes 插件
  • Docker-in-Docker/dind 容器
  • 多阶段 Dockerfile

流程如下所示:

  1. 拉建设者docker pull repo/image:builder
  2. 构建构建器DOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --target builder --cache-from repo/image:builder --tag repo/image:builder
  3. 推送生成器docker push repo/image:builder
  4. 拉图像docker pull repo/image:tag
  5. 构建镜像DOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from repo/image:builder --cache-from repo/image:tag --tag repo/image:tag
  6. 推送图片docker push repo/image:tag

Dockerfile:

COPY --from=builder --chown=nginx:nginx /app/frontend/built /project/web/publicdocker build 永远卡住(30-40 分钟后我手动停止它)没有错误。

编辑:在第一次运行时,当注册表中还没有图像时,构建器缓存并按COPY --from=builder预期工作。只有从第二个版本开始,它才会卡在COPY --from=builder

0 投票
1 回答
995 浏览

docker - 使用“Docker 外部的 Docker”设置时无法连接到 Jenkins 管道中的 Docker 容器

我正在基于这样的代理运行 Jenkins 工作:

注意: dockerdocker-compose安装到我的代理容器中,以便能够在管道阶段内运行 docker 容器(“Docker 之外的 Docker”设置)

在管道中,我开始docker-compose设置包含 2 个容器 - 服务器和 webapp

之后,我想向 发送一个 GET 请求localhost:8080,这是应该从那里提供网络应用程序的地方。但我明白了

相同的 docker-compose 设置适用于我的开发人员。机器。端口转发设置正确(docker-compose配置文件中启用了8080:8080端口转发)

我认为这与我在 Jenkins 中所做的“Docker 之外的 Docker”设置有些相关,也许端口 8080 实际上似乎正在侦听我的管道代理的主机,不确定……</p>

我会很高兴在这个问题上获得新的想法,我完全没有想到这个。

只是为了提供更多上下文:我想通过 docker-compose 运行 web-app + API 服务器,然后运行 ​​Cypress(在 docker-compose 设置之外)通过 UI 进行 E2E 测试

0 投票
1 回答
1520 浏览

docker - 在 kubernetes 从站中运行的无根目录,“docker run”失败

有没有人看到/解决了以下问题:

我有一个配置了无根dind的jenkins slave,所有docker命令都可以工作,除了docker run,详细信息和错误如下:

错误:

配置和版本:

uname -a Linux jnlp-5n7x4 4.4.0-1092-aws #103-Ubuntu SMP 2019 年 8 月 27 日星期二 10:21:48 UTC x86_64 Linux

码头工人信息:

提前致谢

0 投票
1 回答
810 浏览

docker - 为什么我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

我在 Gitlab.com 的 CI runner(s) 上运行它。我的截断版本.gitlab-ci.yml

我的脚本/测试的截断版本是

我发现无论我的 ORIGIN 是localhost,docker0.0.0.0。我总是得到can't connect to remote host (0.0.0.0): Connection refused

我在 Gitlab 论坛和堆栈溢出上看到了很多答案,但没有一个能解决问题。发生了什么,我该如何解决/诊断问题?

0 投票
1 回答
113 浏览

docker - 转发主机 gitlab-ci for dind


问题:需要添加一些行(例如:124.343.23.34 gitlab.example.com)到 /etc/hosts 以用于 dind(docker in docker)。
gitlab-ci.yml 中的所有内容
当前脚本:

0 投票
0 回答
884 浏览

docker - Docker 入口点以交互模式与不同用户运行命令

我有一个安装了 docker 的自定义映像(docker-in-docker)。运行映像时,用户需要是$USERNAME(而不是 root)。但是,docker 服务需要 root 才能启动。

让 docker 以非 root 身份运行似乎过于复杂。所以我尝试su在入口点中使用,它可以工作,但它不是交互式的。

并且entrypoint.sh是:

我将其运行为:

或者,如果您不想接受 pulumi 的话:

知道如何正确地将 tty 传递给 su 命令吗?