Docker-image-as-executable:我应该在CMD还是ENTRYPOINT中执行?
我正在创build一个Docker镜像来初始化我的PostgreSQL数据库。 它看起来像这样:
FROM debian:stretc RUN set -x \ && ... ommitted ... && apt-get install postgresql-client -y COPY scripts /scripts CMD cd /scripts && psql -f myscript.sql
这很好。 每次我需要初始化我的数据库,我启动容器( docker run --rm my-image
)。 psql
命令完成后,容器会自动停止并删除(因为--rm
)。 所以基本上,我有一个Docker-image-as-executable 。
但是,我觉得最后一行应该是:
CMD cd /scripts && psql -f myscript.sql
要么
ENTRYPOINT cd /scripts && psql -f myscript.sql
在我的情况下应该使用哪一个( Docker-image-as-excutable )? 为什么?
你需要使用ENTRYPOINT,如果你需要把它作为“Docker-image-as-executable”
-
RUN执行您在新图层中给出的命令并创build一个新图像。 这主要用于安装新的软件包。
-
CMD设置默认命令和/或参数,但是,当docker运行时,我们可以覆盖这些命令,或者通过命令行绕过默认参数
-
当你想运行一个容器作为可执行文件时,使用ENTRYPOINT。
入口点和命令都会做同样的事情。 唯一的区别在于,当使用CMD时,您可以更灵活地覆盖从CLI运行的命令。
所以如果你有dockerfile:
FROM debian:stretc RUN set -x \ && ... ommitted ... && apt-get install postgresql-client -y COPY scripts /scripts CMD cd /scripts && psql -f myscript.sql
您可以从cli中覆盖dockerfile中定义的CMD以运行不同的命令:
docker run --rm my-image psql -f MYSCRIPT2.sql
这将运行在cli中给出的MYSCRIPT2.sql。 你不能用ENRTYPOINT来做到这一点。
- 如何使Docker Compose构build速度更快?
- Intellij docker集成插件和docker-machine上针对windows 10的无效卷规范
- 如何使redis BROKER_URLdynamic部署到AWS实例
- 如何推送一个图像IDdocker回购
- 使用SFTP从本地计算机上的Sublime Text编辑Docker容器(“远程”)中的文件
- Docker如何用于多层应用程序?
- Docker中使用入口点的节点webservice失败,但在其他情况下工作
- Jenkins Dockerfile – 无法准备上下文:无法评估Dockerfile中的符号链接
- 是否有可能从psql内导入OSM数据?