docker - 使用刚刚复制的文件运行 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"]
但它没有改变任何东西。
是否可以让这样的容器只复制文件并使其启动并运行,直到我停止它?
解决方案
所以真的没有问题——你已经成功地运行了你的docker,里面有文件。但是,只要您没有为容器提供任何额外的作业,您的运行过程就需要 1 秒。
首先,您应该熟悉 Docker 术语中的“运行”容器。容器在其主进程 ( PID 1
) 运行之前一直在“运行”。进程退出 => 容器停止。当您希望容器保持运行(例如作为服务)时,您需要保持主进程处于活动状态。
第二,你的主要流程是什么?它是容器启动时启动的进程。它结合了 fromENTRYPOINT
和CMD
指令(带有一些规则)。这些指令通常被赋予默认值,Dockerfile
但您可以覆盖它们。如果您只是运行docker run <image>
,则采用默认值,但如果您在 之后提供一些参数<image>
,它们会覆盖CMD
.
所以,alpine
你可以简单地运行 shell 像docker run -it alpine sh
. 在您退出 shell 之前,您的容器正在运行。
最后一个。参数-it
将两者连接STDIN
到STDOUT/STDERR
您的控制台。因此sh
,您的主要进程会一直保持活动状态,直到您关闭控制台。
推荐阅读
- c++ - 如何在 C++ 20 中执行链式协程
- react-native - 反应本机应用程序中的bitcore-wallet-client
- xml - XSLT:使用 XSLT 1.0 规范化与 complexTypes 的 XML 关系
- r - 编写一个 for 循环以在 R 中生成制表符分隔的文件
- mysql - 我可以在添加了变量值的列上利用索引吗?
- git - 为什么 'git config --list' 显示两个电子邮件地址和一个用户名?
- excel - 如何制作可以处理垂直和水平范围的excel vba函数
- javascript - Mongoose:更新数组对象中的一个值
- android - CameraX 分析/Camera onPreviewFrame
- java - Outlook 安全链接保护两次触发实际的 Rest 端点 API