Tl; Dr; 对于docker build,相当于docker run -v是什么?
我创建了一个包含两个步骤的测试用例:
这很好用,但是我现在正在考虑如何从 在我们的Jenkins CI安装程序中。
我们有一个Dockerfile,Jenkins使用它来建立构建 环境并运行测试,所以我有一个 docker处于docker 情况。
我已阅读常规建议,包括https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ 但仍被基础知识所困扰。 我认为讨论往往集中在“ docker run”内部的“ docker run”上 而我想在“ docker build”中“先构建docker,然后运行docker”
为了简单起见,我暂时忽略了Jenkins部分,并将Dockerfile切回到 至少达到我使用的最低要求:
docker build -t minimal -f Dockerfile.minimal .
我可以创建一个几乎可以运行docker的docker映像。
我的第一个问题是运行“ docker run”的输出未回显到终端
RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world
运行显然很成功,但是我看到的是:
Step 10/10 : RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world
---> Running in 6334040920e9
Docker version 18.09.3, build 774a1f4
Removing intermediate container 6334040920e9
---> bd3eaf625228
而不是:
>docker run -t hello-world
Hello from Docker!
...
我想在父级上下文中将图像构建为同级而不是子级。一个问题是“ docker build”没有-v选项。 所以目前我有:
Step 12/12 : RUN docker build -f Dockerfile .
---> Running in cb45800fb1cf
错误检查上下文:“无法统计” / proc / 1 / map_files”。 命令'/ bin / sh -c docker build -f Dockerfile。'返回了非零代码:1
我当前的最小Dockerfile是:
FROM debian:9
RUN apt-get -y update && apt-get install -y gpg-agent apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -XGET -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get -y update && apt-get -y install docker-ce
RUN whoami
VOLUME /var/run/docker.sock
RUN docker --version
RUN docker -v /var/run/docker.sock:/var/run/docker.sock ps
RUN sh -c '(docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world)'
COPY Dockerfile2 Dockerfile
RUN docker build -f Dockerfile .
其中Dockerfile2更为最小:
FROM debian:9
RUN echo "hello world"
这可能是Access docker within Dockerfile?的重复,它说这是不可能的,但是自从回答了这个问题以来,Docker可能已经发展了?
答案 0 :(得分:0)
我认为这不可能。即使是这样,听起来也可能过于复杂。
如果您想做一些比DinD(Docker-in-Docker)更好的事情-您可以尝试building your images with buildah,它不需要Docker守护程序(因此更安全)来构建映像并且比我在DinD场景中看到的要好(至少对我来说)。