使用仅复制的文件运行docker

时间:2019-01-22 13:06:26

标签: docker dockerfile

我正在构建仅包含复制文件的图像,并带有以下Dockerfile

FROM alpine:3.8

COPY ./somefile /srv/somefile

当我尝试docker run图像时,它立即退出,也就是在docker run之后,我退出了:

Exited (0) 1 second ago.

我尝试添加CMD ["/bin/sh"]ENTRYPOINT ["/bin/sh"],但没有任何改变。

是否有可能只有这样的容器才能复制文件并使其运行,直到我停止它?

1 个答案:

答案 0 :(得分:0)

因此,实际上没有问题-您成功,其中运行了带有文件的docker。但是,只要您不为容器提供任何其他作业,您的运行过程就花费了1秒钟。

首先,您应该熟悉Docker术语中所谓的“运行”容器。容器正在“运行”,直到其主进程(PID 1)正在运行。进程退出=>容器停止。如果您希望容器保持运行状态(例如,作为一项服务),则需要保持主进程处于活动状态。

第二,您的主要流程是什么?它是在容器启动时启动的过程。它由ENTRYPOINTCMD指令(带有一些规则)组合而成。这些伪指令通常在Dockerfile中被赋予默认值,但是您可以覆盖它们。如果仅运行docker run <image>,则会采用默认值,但是如果在<image>之后提供一些参数,它们将覆盖CMD

因此,对于alpine,您可以简单地运行docker run -it alpine sh之类的shell。直到退出外壳,容器才开始运行。

最后一个。参数-itSTDINSTDOUT/STDERR都连接到您的控制台。因此,您的sh进程(主要过程)将一直存在,直到您关闭控制台为止。