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

python-3.x - 如何修复在 Python 3.x 架构的 docker (dind) 服务中使用 docker 的 Gitlab CI 构建的 SSL 证书验证错误?

我收到来自 gitlab CI 构建的 SSL 证书验证错误,该构建在 Python 3.x 架构中使用 docker 中的 docker。所有 CI 构建映像都是基于 alpine linux 的。

我已经设置了一个使用 Pytest 的 CI Python 3.x 测试作业。Pytest 在一些测试中产生了一个 docker-compose 进程。可以在gitlab-ci 论坛帖子中找到架构的图像

从 gitlab-CI 测试作业中,我导出 REQUESTS_CA_BUNDLE 和 SSL_CERT_FILE 环境变量以引用自定义根 ca 文件。我必须设置这两个变量,因为tus-py-client同时使用requestshttp.client库来处理 http 请求。

docker-compose 服务,从 pytest 开始,封装了一个自定义的 ca 根证书。这是服务器。

自定义 ca 根证书也包含在运行 pytest 的 gitlab CI 构建作业使用的映像中。这是客户端。

我还尝试将 ca 根证书封装在自定义 docker:dind 图像中。在所有情况下,在构建映像时都会运行update-ca-certificates 。据我了解,我认为 docker-compose 容器服务将从 docker-in-docker (dind) 实例中启动。

下面列出了.gitlab-ci.yml文件的简要概述。

据我了解,ca 根证书需要安装在客户端和服务器的证书存储中。在这种特殊情况下,客户端是 CI 测试作业,服务器是 nginx 容器。这是由 docker-compose 进程触发的,从 pytest 中产生。

我在 gitlab-ci 论坛上的帖子中提供了架构的图像。

我收到 SSL 证书验证失败异常,ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:847)?客户端正在连接到docker:dind实例中的服务器,握手过程似乎失败了。有任何想法吗?

更新 如果我openssl s_client -connect docker:1081 -CApath /etc/ssl/certs从 CI 构建测试作业中发出,尝试验证证书,我会收到验证错误:num=21:无法验证第一个证书并验证错误:num=20:无法获取本地颁发者证书。

我尝试在单独的 Ubuntu 16.04 裸机实例上启动 docker-compose 服务,并使用 update-ca-certificates 安装了根证书。然后,我openssl s_client -connect docker:1081 -CApath /etc/ssl/certs在将 *docker 127.0.0.1 添加到 /etc/hosts 后成功验证了它。所以服务器证书和根 ca 似乎没问题。

为什么在连接到docker:dind中运行的特定 docker-compose 服务时收到验证错误号 20 和 21 ?

更新 21/12/2018 已 修复。在 CI 测试作业的图像中,我将自定义 ca 证书放在/usr/local/share/ca-certificates中。以前我将证书放在/usr/local/share/ca-certificates/subfolder中,并且在运行 update-ca-certificates 后,它没有附加到/etc/ssl/certs/ca-certificates.crt包中。在此之后,我恢复到 .gitlab-ci.yml 中事实上的 docker:dind 图像,证书仍然被成功验证。所以不需要在 docker:dind 中安装 ca root cert。

在开发环境中做了一个干净的 git clone。我修复了 pip install 的 requirements.txt 的一些问题,并在构建环境中成功测试。构建环境现在正确匹配开发环境!

0 投票
1 回答
1016 浏览

docker - dind:注册表镜像被忽略

我正在使用一个dind(docker中的docker)图像,并使用以下参数对其进行旋转,以便为dockerhub提供一个内部代理存储库

在 dind 容器中,这些似乎很好

但是,当我尝试提取图像时,此参数似乎被忽略了

0 投票
1 回答
900 浏览

docker - 如何使用 docker DIND 从 gitlab CI 中的私有注册表中提取

实际上,我正在使用带有 docker executor 的 gitlab 运行器,并且我正在尝试提取一些 docker 图像来进行一些测试,并为了保留我的网络连接,我创建了一个私有 docker 注册表来“缓存”图像。

因此,我的注册表链接到我的 gitlab 运行器(在 config.toml https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section中配置)。

这项工作,我的形象可以询问注册表:

但 DIND 服务不能:

我用于此任务的 gitlab-ci conf

0 投票
2 回答
546 浏览

docker - 安装 kubeadm-dind-cluster 后无法访问 K8s 仪表板

我正在为 Kubernetes 开发人员和扩展 Kubernetes 的项目使用kubeadm-dind-cluster一个 Kubernetes 多节点集群。基于 kubeadm 和 DIND(Docker 中的 Docker)。

我有一个刚刚运行的全新 Centos 7 安装./dind-cluster-v1.13.sh up。我没有设置任何其他值,而是使用所有默认值进行联网。

一切看起来都很好:

它看起来很健康:

我知道仪表板服务在那里:

但是任何访问它的尝试都被拒绝:

我还在防火墙日志中看到以下内容:

关于我如何从我的开发机器外部实际访问仪表板的任何建议?我不想使用代理来执行此操作。

0 投票
1 回答
11316 浏览

docker - 如何在没有日志的情况下在后台运行 dockerd

我正在使用franela/dind图像来获得 bash:

*确保/etc/docker/daemon.json在运行前删除dockerd

在里面我跑了dockerd,它开始打印很多日志:

我试图在没有日志的情况下运行它,但我尝试的一切都没有帮助:

dockerd在没有所有这些日志的情况下如何运行服务?让它处于相当模式。

0 投票
0 回答
124 浏览

docker - 使用 DinD 在容器之间共享卷

我有一个当前正在使用 DinD 的 GitLab CI 工作。CI 在 docker 容器中运行。

我想要完成的是:

  • CI 作业 docker 容器使用 dind 运行带有卷的 docker 容器。

    /li>
  • CI 作业 docker 容器使用相同的卷运行另一个 docker 容器。

    /li>

这是试图在第二个 docker 容器上自动挂载一个卷。它在不使用dind时有效。

主要问题是这样的:

知道有什么问题吗?

0 投票
3 回答
2077 浏览

docker - 如何在 Heroku 上的 Docker 中运行 Docker?

为什么?
我正在尝试为在 Heroku 上运行 docker-compose 创建一个通用解决方案。我想通过使用 Heroku Button 部署来制作一键式部署解决方案。这样,用户不需要任何关于 git、Heroku cli 和 docker 的知识。

问题。
Docker 和 docker 守护进程仅在我设置stackcontainer. 有一些构建包可以为您提供 docker 和 docker-compose CLI,但如果没有 docker 守护程序,您将无法运行 docker 映像。所以buildpacks不会工作。设置为我可以使用文件
(文章。在那里我定义了我的流程。(它取代了。如果我仍然将 a 添加到我的项目中,它将什么都不做。) 我还可以在那里定义一个来构建我的 docker 映像。 但是,当我运行 docker 映像时,会弹出以下错误: stackcontainerheroku.ymlProcfileProcfile
Dockerfile

问题在于 Docker 容器内部的 Docker 守护程序没有运行。解决方案是挂载它:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
因为你不能使用Procfile我不能运行那个命令。(参见上面的heroku.yml替换Procfile。)如果我使用的是 buildpack,我可以使用Procfile,但 docker 守护进程不会运行.....

我尝试VOLUME在其中定义一个Dockerfile并且问题仍然存在。此外,heroku 文章说“不支持卷安装。dyno 的文件系统是短暂的。”

在 Heroku 上可以运行 docker 镜像。我正在努力的是在 docker 映像中运行一个 docker。
通过挂载在 docker 映像中运行 docker 在我的 VPS 上运行良好,/var/run/docker.sock但这不能(?)在 Heroku 上完成。

最后一句话:我正在努力使这项工作成为可能,以便其他人可以轻松地部署软件解决方案,即使他们不熟悉 git、heroku cli 和 docker。

0 投票
1 回答
1165 浏览

docker - Docker-in-Docker 与 Alpine 3.8

最近,DIND 版本从使用 Alpine 3.8 更新到了 Alpine 3.9。
Alpine 3.9 仅支持 Node 10.14。这是有问题的,因为 Node 10.14 与几个必需的包不兼容,例如 ursa 和 @newrelic/nativemetrics……这些与支持 Node 8.14 的 Alpine 3.8 配合得很好。

我们一直在使用 DIND 作为 Docker Swarm 中构建的管道 Jenkins 代理。
通过上述升级,带有 Alpine 3.8 的 DIND 不再可用,我们现在处于构建管道被破坏的情况......

有人可以建议一种使用 Alpine 3.8 获得 DIND 的方法吗?
这是 Dockerfile:https ://github.com/IdanAdar/test-docker

0 投票
0 回答
282 浏览

kubernetes - kubeadm dind 不会从 http 上的不安全注册表中提取

我正在尝试使用kubeadm dind,但我在使用私有注册表时遇到了问题。我创建了一个docker私有注册表,运行在http上,但是运行在dind中的kubernetes拒绝使用http,一直尝试使用https下载。

我收到的错误是这个......

无法提取图像“192.168.2.5:5000/inotes-init-db:1.0.18”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应: 获取https://192.168.2.5:5000/v2/:http : 服务器给 HTTPS 客户端的 HTTP 响应

但是注册表是在http上运行的...

正如您在上面看到的,它在 http 上运行良好,但如果我尝试使用 https,它会失败......

我还想我也许可以访问 kubernetes 节点来更新他们的/etc/default/docker.json文件,但我不能进入它们。

那么,如何让 kubeadm 使用 http 呢?

0 投票
1 回答
1129 浏览

docker - 如何使用具有代码质量的 GitLab CI?

最近我正在学习使用 Gitlab CI。作为演示,我决定配置一个代码质量检查作业。在注册跑步者之后,我.gitlab-ci.yml像这样配置我的文件:

这是官方网页:链接

这是来自 gitlab 官方的模板。当我运行管道时,它就像卡住了一样。然后我知道,码头工人正在拉很多codeclimate图像,包括两个超过 1GB 的图像。最后,提取这些图像大约需要 15 分钟。

这对我来说花费了太多时间,所以我想我可以建立一个本地注册表来加快拉动速度(因为它在 docker tech 中使用 docker,所以每次我运行 pipline 时都会有一个 containerA 并在 containerA 中运行一个 containerB。所以对于 containerA ,从来没有本地镜像。所以containerA总是从registry中拉取镜像。)我在我的服务器上部署了一个本地registry,并将所有10GB+的镜像都推送到它。我改变了我.gitlab-ci.yml这样的:

(192.168.0.1 是本地主机)

我又跑了一次管道,它比从互联网上拉图像还要慢!通过执行命令iostat,我的硬盘 io 速度刚刚超过 1740kb/s,而且它的成本

这让我感觉很失落。你有什么建议吗?感谢你们!