问题标签 [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 投票
4 回答
157679 浏览

docker - 从 docker 内部运行 docker 可以吗?

我在 Docker 容器中运行 Jenkins。我想知道 Jenkins 容器是否也可以作为 Docker 主机?我正在考虑的是从 Jenkins 内部为每个集成测试构建启动一个新的 docker 容器(启动数据库、消息代理等)。因此,在集成测试完成后应该关闭容器。是否有理由避免以这种方式从另一个 docker 容器中运行 docker 容器?

0 投票
1 回答
1559 浏览

docker - Docker 中的 Docker - SSL 问题

我在我们的 CI 管道中使用 Docker In Docker for Jenkins Slaves。

我遇到了关于 SSL 的问题。问题是 maven 无法访问位于我们的 Nexus 存储库中的工件,它只是挂起。

我尝试使用 curl 进行调试。

在 DinD 容器内,一切都很好:

但是,如果我运行:

它挂了很长时间,然后我收到此错误:

我可以将有问题的curl语句向上运行(运行有问题的 docker 容器的 docker 容器),一切都很好。

我应该注意,如果我在笔记本电脑上运行有问题的 DinD 容器(虽然不是在 DinD 中),它没有问题。

使用调试信息更新:

有任何想法吗?

0 投票
2 回答
6145 浏览

scala - 使用 Dockerfile 安装 Docker

我有一个看起来像这样的 Dockerfile:

我想要做的是,我想将 Docker 安装到这个映像中,并能够在其中运行 docker 命令形式。如何启动已安装的 docker 实例?

0 投票
3 回答
7820 浏览

networking - Docker 容器网络与 Docker-in-Docker

我想通过 docker-in-docker 设置与来自父 docker 容器的子 docker 容器联网。

假设我正在尝试连接到一个简单的 Apache httpd 服务器。当我在主机上运行 httpd 容器时,一切正常:

但是,当我从 docker-in-docker 设置中执行相同操作时,出现Connection refused错误:

我已经尝试了几次更改,但没有运气。指定0.0.0.0接口:

使用主机网络:

令人惊讶的是,我找不到任何关于此的现有文章。这里有没有人有一些见识?

谢谢!

0 投票
4 回答
14781 浏览

macos - 从 Docker Ubuntu 容器内以非 root 用户身份在 Mac 主机上调用 Docker 的权限被拒绝错误

我正在尝试在运行 Docker for Mac 17.06.0-ce-mac17 的 OSX 主机上从正在运行的 jenkins docker 容器(jenkins:latest)中调用 docker,按照http://jpetazzo.github.io/中描述的过程2015/09/03/do-not-use-docker-in-docker-for-ci/。</p>

我将 /var/run/docker.sock 挂载到容器中,我在其中粘贴了一个 ubuntu docker 二进制文件,它能够执行 - 但是当我运行时从容器内部以用户“jenkins”的身份运行,例如“docker ps”我得到

尝试在 unix:///var/run/docker.sock 连接到 Docker 守护程序套接字时获得权限被拒绝:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json?all= 1:拨打 unix /var/run/docker.sock:连接:权限被拒绝。</p>

如果我以 root (docker exec -u 0) 身份连接到容器,它可以工作。

我需要 jenkins 用户才能运行它。我尝试在 ubuntu 容器中添加一个 docker 组并将 jenkins 添加到它,但这没有帮助,因为它与外部无关,而且 Docker for Mac 不像在 linux 上运行它那样工作,你可以做半简单uid/gid 匹配。我想分发这个容器,所以去破解我的 Docker for Mac 安装的一部分的答案不会真正帮助我。如果可以的话,我宁愿不以 root 身份运行整个 jenkins 设置。(我还尝试以特权身份运行容器,但没有帮助。)

根据 Permission Denied 中的建议,在 Macbook 中运行 Jenkins 管道时尝试连接到 Docker Daemon,我将容器内的 /var/run/docker.sock 文件手动分配给 jenkins,现在 jenkins 可以运行 docker。但是我在想出一个可分发容器的解决方案时遇到了麻烦——我不能在 Dockerfile 中做那个 chown,因为该文件还不存在,并且填充到入口点并没有帮助,因为它作为 jenkins 运行.

为了构建和运行将在我的 Mac 上作为非 root 用户从容器内部运行外部 docker 容器的映像,我需要做什么?

0 投票
2 回答
9292 浏览

docker - 从 GitLab CI 运行器连接到 docker-in-docker

我有一个我想要的 GitLab 管道:

  1. 构建 Java 应用程序
  2. 使用 docker-compose 进行测试
  3. 推送到我的 Docker 存储库

我遇到的主要问题是这有效

输出按预期打印:

虽然这没有(安装步骤docker-ce省略):

它失败了:

如何使我的ubuntu图像(或将构建我的项目的任何图像)连接到链接的 Docker-in-Docker 服务?docker:latest不是在做什么?

我已经阅读了GitLab 服务文档,但从主机名的角度来看,这对我来说才有意义。(如果你有mysql服务,你可以通过 连接mysql:3306。)

编辑:将命令更新为echo $DOCKER_HOST,我在docker:latest图像中看到:

ubuntu:latest我看到的图像中:

0 投票
1 回答
5138 浏览

docker - Docker DIND 无法访问私有注册表

我正在使用 GitLab 以及 GitLab runner 和 DIND。

配置细节:

顺便说一句,在上述配置中,是DOCKER_HOST需要配置.gitlab-ci.yml还是只需要条目 ( host = "tcp://gitlab-dind:2375)config.toml就足够了?

现在,当跑步者运行时,我收到以下错误:

我可能错了,但似乎这个错误是因为服务帐户( )在 DIND 图像拉取发生之前svc-art-user无法登录。

0 投票
1 回答
1619 浏览

docker - docker run -v 将文件挂载为目录

我正在尝试使用 -v 标志将包含某些凭据的文件的目录挂载到容器上,但不是将该文件挂载为文件,而是将其挂载为目录:

运行脚本:

当我查看命令的 debug spew 时docker run,我看到它创建了/creds/目录,但由于某种原因,它创建为该目录key.json下的子目录,而不是复制文件。

我看过其他一些帖子说,如果你告诉docker run挂载一个它找不到的文件,它会在容器上创建一个带有文件名的目录,但是由于我没有指定文件名并且它知道命名新的目录'key.json'似乎能够找到该文件,但无论如何将其创建为目录?有没有人遇到过这个?

如果它是相关的,作为 GitLab 的 CI 过程的一部分,该脚本正在另一个容器中的 Docker-in-Docker 中运行。

0 投票
2 回答
2994 浏览

docker - GitLab CI - 无法登录到 Docker 注册表 (x509)

我正在尝试使用 Docker 执行程序和 docker-in-docker 方法设置我的 GitLab CI/CD,但遇到以下问题:

在我的 .gitlab-ci.yml 中,我试图与 GitLab 的项目集成 docker 注册表建立连接:

但是,管道退出并出现以下错误:

我能够登录到注册表并从运行 gitlab-runner 的机器上推/拉而没有问题,所以我知道证书问题不在主机上。此外,我尝试从 docker:latest 创建自定义 Docker 映像构建,它将我的证书复制到构建容器中——我尝试将它放在 /etc/ssl/certs 和 /etc/docker/certs.d/my.gitlab .server:1234 - 没有任何成功。

关于我需要将证书放在哪里或如何解决这个问题的任何想法?

0 投票
1 回答
55 浏览

docker - 如何仅在需要时从 Docker 注册表中提取,或者“最新”这个词是什么意思?

我正在使用 Gitlab-CI 在 docker-in-docker 映像中构建一些 Docker 映像。这很重要,因为每个构建都使用一个带有空 Docker 缓存的新 docker-in-docker 环境。可以在 Gitlab 中缓存缓存并稍后恢复,但这似乎并不安全——网上有人这样做了——但这似乎并不安全。

我在 Nexus 中有一个 Docker 注册表,我已成功用于拉取和推送。

我还设置了将图像保存到 Gitlab-ci 的缓存中docker save并使用docker load.

通过从注册表中提取从 Gitlab-CI 缓存加载,我可以运行docker build --cache-from ...,Docker 将逐步构建,而不是重建任何未更改的图像层。

所有构建的图像都获得latest标签。

不起作用的部分是:如果我从 Gitlab-CI 缓存加载图像,然后从注册表中提取,则注册表中的图像始终用作 Docker 的观点,即使是几周比从缓存中加载的旧。这似乎是有缺陷的行为——至少可以说,据我所知,这是非常出乎意料且没有记录的。

我如何告诉 Docker:1)使用最新的作为最新的(没有latest标签的替代方案是可能的),以及 2)只下载自加载到 Docker 缓存中的内容后发生更改的层?

这是两个问题,但我希望他们有相同的答案。