https://www.bilibili.com/video/BV1qN411K7W3?t=844.3&p=42
https://www.bilibili.com/video/BV1qN411K7W3?t=373.6&p=43
第一片中说 Tomcat 不能不省,第二片实作,却是省的,这边有说错吗?
要进入或是启动 Docker 中的某个程序,可预设什麽都不加吗?
1
julyclyde 259 天前
大家没兴趣去看你转载的视频
你首先要学会提问的方法 |
4
Dffcc OP 就是 docker run --name mytom -it -P 8081:8080 tomcat:8.5.49 ,要启动 Tomcat 进程,后面为何不能加 bash 指令?
eg : docker run .... 最后的地方,要看 Dockerfile 中的 CMD 指令,但是不管从 Tomcat 的 Docker file 看 CMD ["catalina.sh" "run"],还是 uBuntu 的 Docker file 看 CMD CMD ["/bin/bash"],都是 CMD 括号可省略,那有没有预设是不可省略指令,还可以启动进程的特例呢? https://hub.docker.com/layers/library/ubuntu/jammy/images/sha256-aa772c98400ef833586d1d517d3e8de670f7e712bf581ce6053165081773259d?context=explore https://hub.docker.com/layers/library/tomcat/8.5.49/images/sha256-8e75a9065fd732f2d06fccba994b246d77360b6e9870ac02b60b5b7d1fc6007d?context=explore |
5
Dffcc OP 还是全都是不加指令,即可启动进程?
|
6
Dffcc OP 可以 运行容器 跟 启动进程 是不相关的
|
7
LemonPrefect 258 天前 1
我覺得 OP 需要查閱關於 docker entrypoint 和 command 的區別的文章。針對於一個容器來說,他一定需要有 entrypoint ,對於一般的 debian 底包來說一般是 bash 。那麼在有 entrypoint 的前提下,CMD 會被當做引數傳遞給 entrypoint 執行。因此 `CMD ["catalina.sh" "run"]` 實際上交由 bash 去執行 catalina 。而在 run 指令中指定的指令引數,也會被傳遞給 entrypoint, **覆蓋** 原有的 CMD 。這就是所謂的 CMD 可省略,是因為原有指定。
|
8
Dffcc OP GPT4 回答
ENTRYPOINT ["catalina.sh"] CMD ["run"] 則這時候,當容器啟動時,執行的命令將會是 catalina.sh run 。 在後一種情況下,如果在 docker run 指令中附加另外的參數,如下所示: bash docker run -it tomcat debug 那麼在 CMD ["run"] 中指定的參數 run 將會被新的參數 debug 覆蓋,容器啟動時執行的命令將會是 catalina.sh debug 。 所以說,CMD 中指定的參數可以被省略,是因為它們會被 docker run 指令中的參數所覆蓋。如果 docker run 指令沒有提供新的參數,那麼它們就會作為 ENTRYPOINT 的默認參數使用。 谢谢你,理解了 |
9
Dffcc OP @LemonPrefect docker top mytom ,可以查看容器的指定进程是否有执行
|