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

docker - 无法在 docker 中运行 nginx

我正在尝试在 Docker 容器中运行 nginx 映像。我已经尝试了这些步骤

  • ubuntu docker镜像中的sshdocker run -v /var/run/docker.sock:/var/run/docker.sock -it ubuntu:latest bash
  • 安装的 Docker
  • 运行 Nginx 镜像docker run -d -p 80:80 nginx

curl localhost:80Connection refused

0 投票
1 回答
1398 浏览

docker - docker-compose 中的 Gitlab-runner 无法连接 http://docker:2375/v1.40/info

短篇小说:我在 docker-compose 中有一个 gitlab-runner,我希望能够使用 DIND,但我遇到了一些困难......

我尝试创建一个平台,其中包含:

  • 声纳
  • gitlab ce
  • gitlab 跑步者
  • 注册表

这些服务由 docker-compose 启动和管理 我使用 gitlab-ci 来验证测试、覆盖率并创建一个 docker 镜像,该镜像上传到注册表 我有一个用于测试目的的共享运行器

这是 config.toml :

我的问题:我需要在运行器中指定:network_mode = "oral_default" 以克隆存储库。但是如果我想使用 Dind 来构建我的图像,我会得到这个错误:

这是我的 gitlab ci:

我强烈认为,生成的容器位于另一个网络中,因此无法访问导致这种行为的 docker-compose 网络。

你能帮助我吗 ?谢谢你。

0 投票
1 回答
1035 浏览

jenkins - docker build 使用 jenkins dind slave + kubernetes 插件抛出 java.net.AbstractPlainSocketImpl.connect UnknownHostException

所以 Jenkins 使用这个官方 helm chart安装在集群内部。这是我根据 helm release 值安装的插件:

我的 Jenkinsfile 依赖以下 pod 模板来启动 slave:

每当有新的 Build 时,奴隶(pod /dind 容器)就会按预期很好地启动。

但是,它在(Jenkinsfile 管道 docker build -t ...)中的“docker build”步骤中断并在那里中断:

乍一看,我认为这是从属容器(docker:19-dind)的 DNS 解析问题,因为它是高山的。这就是为什么我/etc/resolv.conf通过添加sh "cat /etc/resolv.conf"Jenkinsfile 来调试它。

我有 :

options ndots:5我根据互联网上许多线程的建议删除了最后一行。

但这并不能解决问题。

想了又想,才发现造成这个错误的容器不是Slave(docker:19-dind),而是为了满足而打开的中间容器docker build

因此,我RUN cat /etc/resolv.conf在 Dockerfile 中添加了另一层(以 开头FROM gradle:5.5-jdk11)。

现在,resolv.conf不同的是:

基本上,它是一个不同于10.0.0.2从容器的名称服务器的名称服务器172.20.0.10。resolv.confndots:5这个中间容器中没有。

在所有这些调试步骤和大量尝试之后,我感到很困惑。

建筑学

0 投票
0 回答
53 浏览

docker - Docker 中的 Docker on Continuous Integration 导致“设备上没有剩余空间”

在我当前的项目中,我们使用 Jenkins 和基于 Docker-In-Docker 的方法来构建 docker 镜像。

我使用 docker-compose 和 Landoops 命令行测试工具 coyote 扩展了我们的一项工作以使用集成测试。我确实在构建中构建了生产 docker 镜像以及仅用于集成测试的 docker 镜像。

一段时间后(我认为/var/lib/docker)下的docker空间填满了整个磁盘,我得到了这样的东西:

当我在清理卷的同时进行 docker 系统修剪时,构建/测试会再次运行,但必须再次下载大量 docker 镜像,并且在另一个测试正在下载/构建 docker 镜像的过程中不应该这样做。

所以我的结论是:Docker-In-Docker(尤其是本地镜像仓库和卷存储)正在使用“外部”Docker 注册表和卷存储。

我的问题是:在不删除每个作业之后/之前的所有图像/卷的情况下,是否有解决这个问题的方法?

更新

我确实发现了这个

“Device Mapper 没有命名空间,因此如果 Docker 的多个实例在同一台机器上使用它,它们都将能够看到(并影响)彼此的映像和容器支持设备。没有。对于许多这些问题都有解决方法; 例如,如果你想在内部 Docker 中使用 AUFS,只需将 /var/lib/docker 提升为一个卷就可以了。Docker 为 Device Mapper 目标名称添加了一些基本的命名空间,这样如果多次调用Docker 在同一台机器上运行,它们不会互相踩踏。”

来自:https ://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

所以在我看来,我们的 OPS 团队只是在不使用 devicemapper 命名空间的情况下挂载了它,因此同一节点上的每个作业都使用相同的 /var/lib/docker。

0 投票
1 回答
3027 浏览

docker - docker-in-docker 卷上的 $(pwd) 挂载了意外的目录

例子:

安装在哪个位置-v $(pwd):/app2?它不在~/test/dind-volumes主机操作系统上。share并且tomita-cfg是来自主机操作系统的文件夹,但路径完全不同,它甚至不是从~

0 投票
1 回答
4715 浏览

git - GitLab CI - 尝试使用 docker buildx 为 ARM64 构建

尝试docker buildx与 GitLabs 共享运行器一起使用来构建可以在我的 Raspberry Pi 上运行的 Docker 映像。作业失败,说 git 不在 PATH 中,但 git 安装在image: docker:stable-git. 是否有任何已知的修复程序或更好的方法来构建与 ARM64 兼容的映像,而无需在 Raspberry Pi 本身上构建?(由于 CPU 使用率,RPi 在构建时变得不可用)

0 投票
2 回答
1677 浏览

docker - 没有 -v /var/run/docker.sock:/var/run/docker.sock 无法连接到 Docker 守护进程

我正在尝试在 docker 容器中运行 docker,并且容器具有 nodeJs App。

这是我的Dockerfile

我使用上面的 Dockerfile 构建了 docker 映像(newdockerimage)并使用docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker newdockerimage.

我可以在容器内安装 docker,但由于 volume ( ) ,主机系统上的所有 docker 映像也在容器内共享/var/run/docker.sock

如果我 -v /var/run/docker.sock:/var/run/docker.sock在运行容器时不使用卷,则会出现以下错误:- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 因为容器将是节点应用程序(因为那是入口点),所以覆盖 docker:dind 入口点

请帮我 !如何在不共享卷的情况下在容器内运行 docker(不复制主机系统的 docker 映像)

0 投票
2 回答
1966 浏览

docker - 在 Docker 中的 Docker 中预拉图像 (dind)

我正在运行一个 docker-in-docker 容器,它总是使用相同的几个图像。我想将它们预先拉到我的 dind 容器中,这样我就不必在启动时拉它们。我怎么能做到这一点?

我正在考虑按照以下方式建立自己的形象

显然,上面的 Dockerfile 不会构建,因为在构建过程中 docker 没有运行,但它应该让我知道我想要实现什么。

0 投票
1 回答
1744 浏览

docker - GitLab Runner Docker Executor 中的缓存层 - 长时间 DinD 容器

我正在我的项目中使用 GitLab CI,并创建了一个图像来进行测试和构建。当我在 docker executor 中运行它时,每个作业都需要从头开始下载图像。我需要缓存图层并拉取图像以缩短构建和部署时间(5 分钟,使用不安全选项最多 1 分钟)。

我搜索了多个链接和多个文章,有很多人有同样的问题。但是,GitLab 团队并没有解决这个问题。并且社区没有可靠且安全的解决方案。下面的链接也有同样的问题:

  1. 最佳答案不起作用:Store layers in gitlab ci docker executor
  2. 绕过问题的多项更改,但没有任何效果:https ://blog.scottlogic.com/2018/02/09/multi-dind-ci-boxes.html
  3. 讨论不要使用已安装的docker.sockhttps ://gitlab.com/gitlab-org/gitlab-foss/issues/17769
  4. 使用挂载docker.sock的讨论:https ://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
  5. 构建一个长时间的容器(不要和我一起工作):https ://medium.com/@tonywooster/docker-in-docker-in-gitlab-runners-220caeb708ca
  6. 未安装docker.sock的文档:https ://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor
  7. 卷配置示例:https ://github.com/ayufan/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#the-runnersdocker-section

最可能的方法(使用层缓存)是使用单独的容器并使运行器连接到它,并从中触发执行。这样,所有层都将位于“无限生命”容器中,并且不会在阶段结束时丢失所有缓存。考虑将docker.sock暴露为挂载的方法不仅不安全,而且在容器之间共享文件时也存在许多问题,因为它们都是兄弟姐妹,而不是共享卷的父母和孩子。

使用无限生命容器的方法如下所示:

或者

然后修改config.toml如下:

或分别

我也尝试过使用环境变量(在config.toml.gitlab-ci.yml 上):

并从.gitlab-ci.yml中删除:

我目前的结果是:

使用已安装的 docker.sock它可以工作。但它是不安全的,并且卷在共享文件、工件和缓存方面存在许多问题。

0 投票
2 回答
521 浏览

ruby - 带有 docker-in-docker 的 gitlab-ci 中没有这样的图像

我在我的 Rails 项目中使用docker-api 。

我需要使用我的自定义图像创建容器。

.gitlab-ci.yml:

我有错误:

如何解决这个问题?