首页 > 解决方案 > 使用刚刚复制的文件运行 docker

问题描述

我正在构建一个仅包含复制文件的图像,其中包含以下内容Dockerfile

FROM alpine:3.8

COPY ./somefile /srv/somefile

当我尝试docker run图像时,它会立即退出,就在docker run我拥有:

Exited (0) 1 second ago.

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

是否可以让这样的容器只复制文件并使其启动并运行,直到我停止它?

标签: dockerdockerfile

解决方案


所以真的没有问题——你已经成功地运行了你的docker,里面有文件。但是,只要您没有为容器提供任何额外的作业,您的运行过程就需要 1 秒。

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

第二,你的主要流程是什么?它是容器启动时启动的进程。它结合了 fromENTRYPOINTCMD指令(带有一些规则)。这些指令通常被赋予默认值,Dockerfile但您可以覆盖它们。如果您只是运行docker run <image>,则采用默认值,但如果您在 之后提供一些参数<image>,它们会覆盖CMD.

所以,alpine你可以简单地运行 shell 像docker run -it alpine sh. 在您退出 shell 之前,您的容器正在运行。

最后一个。参数-it将两者连接STDINSTDOUT/STDERR您的控制台。因此sh,您的主要进程会一直保持活动状态,直到您关闭控制台。


推荐阅读