从零开始运行一个数据容器的 Docker

7
我创建了一个仅包含静态HTML文件的数据容器,旨在供nginx容器使用。我的目标是让我的web应用程序提供一个卷,供nginx使用。
为此,我创建了一个简单的Dockerfile:
FROM scratch
MAINTAINER me <me@me.com>
ADD dist/ /webappp/

当我从命令行运行创建的容器时run -d -v /webappp --name webapp myOrg/webapp echo yo,我会得到错误Error response from daemon: Cannot start container db7fd5cd40d76311f8776b1710b4fe6d66284fe75253a806e281cd8ae5169637: exec: "echo": executable file not found in $PATH。这当然是正确的,因为镜像根本没有可执行的命令。不能在没有命令的情况下运行容器。虽然这个命令行错误对我来说不是什么大问题,因为我知道数据容器已经创建并且现在可以被nginx访问,但如果我想要使用Vagrant自动化它,它就成了一个无法实现的目标。自动化过程总是因为这个错误而失败。
到目前为止,我的唯一解决方案是从IMHO中扩展我的小巧镜像,这对于一个数据容器来说没有意义,只是为了调用echo或true!
Docker是否有NOP exec命令?或者Docker是否总是需要执行某些东西?是否可能运行一个什么都不做或不产生错误的scratch容器?

我不确定这是否有帮助,但你尝试过https://dev59.com/_18e5IYBdhLWcg3wVJPH吗?顺便说一下,我最终使用busybox作为我的数据容器。 - Tg.
2个回答

7
如Docker手册所述:容器不需要运行。它也没有说容器“应该”能够运行。
因此,与其通过运行一个数据容器(如docker run -v /webappp --name webapp myOrg/webapp echo yo)来打印一些愚蠢的东西, 只需创建容器并永远不要运行/启动它已经足够了。 docker create -v /webappp --name webapp myOrg/webapp 注意:在配置过程中,Vagrant不支持docker create!

很棒的答案!请注意,在docker 1.5.0中,我必须附加一个命令才能使docker create正常工作。当然,该命令不必存在,因为容器永远不会运行。 - rollingBalls

4

你关于大小的观点是正确的!但我不想有任何额外的开销(比喻而言)。有一天,有人可能会启动仅数据容器,因为他可能会被诱惑认为“嘿”,这是通过阅读其名称来实现的nginx。它甚至可以工作,但肯定不是您想要的nginx配置。因为没有人负责更新数据仅从镜像中并将其与工作的nginx配置同步。所以对我来说,这只是一个解决方法,通过使用busybox或任何其他迷你发行版来解决问题。 - Vad1mo
不会,因为我认为你无法使用 docker start 覆盖 echo 命令。顺便说一句,这是在 echo 命令中放置容器描述的好理由,因为它将显示在 docker ps 和 inspect 中。 - Adrian Mouat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接