docker - 每当我(重新)启动容器时,是否有一种简单的方法可以自动运行脚本?

标签 docker

由于这个 Dockerfile 命令,我已经构建了一个 Docker 镜像,将一个脚本复制到镜像中,并在我运行镜像时自动执行它:
ENTRYPOINT ["/path/to/script/my_script.sh"]
(我必须在 RUN 命令中赋予它 chmod 权限才能使其真正运行)

现在,我对 Docker 很陌生,所以我不确定我想做的是否是好的做法:

我的基本想法是,当我想运行这个脚本时,我宁愿不必总是创建一个新容器,而是在我(重新)启动同一个容器时找到一种重新执行这个脚本的方法。

因此,不必键入 docker run my_image ,通过 docker (re)start container_from_image 完成相同的操作.

有没有一种简单的方法可以做到这一点,从资源节约的角度来看它是否有意义?

最佳答案

docker run相当便宜,典型的 Docker 模型通常是你总是从“白板”开始,然后从那里开始设置。 Docker 容器没有与 systemd 作业相同的一组 pre-start/post-start/... 钩子(Hook);只有 ENTRYPOINT/CMD 机制。你现在拥有的东西是正常的。

还请记住,您需要删除和重新创建容器以进行各种常规更改,其中最重要的长期是您必须删除容器才能更改底层镜像(因为已安装的软件或基础 Linux 发行版具有关键的你需要修复的错误)。我感觉像是一个围绕 docker build 构建的工作流/run/stop/rm是“最 Dockery”,并且非常适合不可 rebase 础架构模式。重复 docker stop/start因为工作流程感觉就像您正在尝试保持此特定容器的活力,并且在大多数情况下这无关紧要。

从技术的角度来看,您可以考虑容器环境及其文件系统,以及容器内部的主进程。 docker run实际上是 docker createdocker start .我从未注意到其中的“创建”一半需要大量时间,但是如果您正在执行诸如启动 JVM 或在启动时加载大型数据集之类的事情,那么“启动”一半将很慢,无论它是否与创建相结合一个新的容器。

关于docker - 每当我(重新)启动容器时,是否有一种简单的方法可以自动运行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56540037/

相关文章:

docker - kairosdb服务未在容器中启动

docker容器中的python jupyter笔记本连接到selenium/standalone-chrome

java - jar在catalina主页的lib文件夹中时,context.xml中类的ClassNotFoundException

bash - 由于docker中.sh文件的权限被拒绝,travis测试失败

python - 为什么人们在 docker 容器中创建 virtualenv?

docker - ipv4 https 请求未转发到 docker 容器

Windows 2016 : Docker container error

java - 如何在docker内为Java应用程序添加多个SSL证书?

java - Docker不会在指定的卷中创建文件

linux - Ubuntu 15.10 32 位上的 Docker(操作系统和处理器)