问题标签 [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.
docker - 从 docker 内部运行 docker 可以吗?
我在 Docker 容器中运行 Jenkins。我想知道 Jenkins 容器是否也可以作为 Docker 主机?我正在考虑的是从 Jenkins 内部为每个集成测试构建启动一个新的 docker 容器(启动数据库、消息代理等)。因此,在集成测试完成后应该关闭容器。是否有理由避免以这种方式从另一个 docker 容器中运行 docker 容器?
docker - Docker 中的 Docker - SSL 问题
我在我们的 CI 管道中使用 Docker In Docker for Jenkins Slaves。
我遇到了关于 SSL 的问题。问题是 maven 无法访问位于我们的 Nexus 存储库中的工件,它只是挂起。
我尝试使用 curl 进行调试。
在 DinD 容器内,一切都很好:
但是,如果我运行:
它挂了很长时间,然后我收到此错误:
我可以将有问题的curl
语句向上运行(运行有问题的 docker 容器的 docker 容器),一切都很好。
我应该注意,如果我在笔记本电脑上运行有问题的 DinD 容器(虽然不是在 DinD 中),它没有问题。
使用调试信息更新:
有任何想法吗?
scala - 使用 Dockerfile 安装 Docker
我有一个看起来像这样的 Dockerfile:
我想要做的是,我想将 Docker 安装到这个映像中,并能够在其中运行 docker 命令形式。如何启动已安装的 docker 实例?
networking - Docker 容器网络与 Docker-in-Docker
我想通过 docker-in-docker 设置与来自父 docker 容器的子 docker 容器联网。
假设我正在尝试连接到一个简单的 Apache httpd 服务器。当我在主机上运行 httpd 容器时,一切正常:
但是,当我从 docker-in-docker 设置中执行相同操作时,出现Connection refused
错误:
我已经尝试了几次更改,但没有运气。指定0.0.0.0
接口:
使用主机网络:
令人惊讶的是,我找不到任何关于此的现有文章。这里有没有人有一些见识?
谢谢!
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 容器的映像,我需要做什么?
docker - 从 GitLab CI 运行器连接到 docker-in-docker
我有一个我想要的 GitLab 管道:
- 构建 Java 应用程序
- 使用 docker-compose 进行测试
- 推送到我的 Docker 存储库
我遇到的主要问题是这有效:
输出按预期打印:
虽然这没有(安装步骤docker-ce
省略):
它失败了:
如何使我的ubuntu
图像(或将构建我的项目的任何图像)连接到链接的 Docker-in-Docker 服务?我docker:latest
不是在做什么?
我已经阅读了GitLab 服务文档,但从主机名的角度来看,这对我来说才有意义。(如果你有mysql
服务,你可以通过 连接mysql:3306
。)
编辑:将命令更新为echo $DOCKER_HOST
,我在docker:latest
图像中看到:
在ubuntu:latest
我看到的图像中:
docker - Docker DIND 无法访问私有注册表
我正在使用 GitLab 以及 GitLab runner 和 DIND。
配置细节:
顺便说一句,在上述配置中,是DOCKER_HOST
需要配置.gitlab-ci.yml
还是只需要条目 ( host = "tcp://gitlab-dind:2375
)config.toml
就足够了?
现在,当跑步者运行时,我收到以下错误:
我可能错了,但似乎这个错误是因为服务帐户( )在 DIND 图像拉取发生之前svc-art-user
无法登录。
docker - docker run -v 将文件挂载为目录
我正在尝试使用 -v 标志将包含某些凭据的文件的目录挂载到容器上,但不是将该文件挂载为文件,而是将其挂载为目录:
运行脚本:
当我查看命令的 debug spew 时docker run
,我看到它创建了/creds/
目录,但由于某种原因,它创建为该目录key.json
下的子目录,而不是复制文件。
我看过其他一些帖子说,如果你告诉docker run
挂载一个它找不到的文件,它会在容器上创建一个带有文件名的目录,但是由于我没有指定文件名并且它知道命名新的目录'key.json'似乎能够找到该文件,但无论如何将其创建为目录?有没有人遇到过这个?
如果它是相关的,作为 GitLab 的 CI 过程的一部分,该脚本正在另一个容器中的 Docker-in-Docker 中运行。
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 - 没有任何成功。
关于我需要将证书放在哪里或如何解决这个问题的任何想法?
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 缓存中的内容后发生更改的层?
这是两个问题,但我希望他们有相同的答案。