V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dffcc
V2EX  ›  Docker

Docker 启动程序方式

  •  
  •   Dffcc · 288 天前 · 754 次点击
    这是一个创建于 288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://www.bilibili.com/video/BV1qN411K7W3?t=844.3&p=42

    https://www.bilibili.com/video/BV1qN411K7W3?t=373.6&p=43

    第一片中说 Tomcat 不能不省,第二片实作,却是省的,这边有说错吗?

    要进入或是启动 Docker 中的某个程序,可预设什麽都不加吗?

    9 条回复    2024-03-11 18:38:47 +08:00
    julyclyde
        1
    julyclyde  
       285 天前
    大家没兴趣去看你转载的视频
    你首先要学会提问的方法
    Dffcc
        2
    Dffcc  
    OP
       285 天前 via iPhone
    @julyclyde 我觉得有些东西直接背起来就好了,讲师也没有解释得很清楚
    julyclyde
        3
    julyclyde  
       285 天前
    @Dffcc 不是答案的问题
    而是大部分人根本不知道你在问什么
    没那么多时间浪费在先看一遍视频去了解你要问什么
    Dffcc
        4
    Dffcc  
    OP
       285 天前
    就是 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
    Dffcc
        5
    Dffcc  
    OP
       285 天前
    还是全都是不加指令,即可启动进程?
    Dffcc
        6
    Dffcc  
    OP
       285 天前
    可以 运行容器 跟 启动进程 是不相关的
    LemonPrefect
        7
    LemonPrefect  
       284 天前   ❤️ 1
    我覺得 OP 需要查閱關於 docker entrypoint 和 command 的區別的文章。針對於一個容器來說,他一定需要有 entrypoint ,對於一般的 debian 底包來說一般是 bash 。那麼在有 entrypoint 的前提下,CMD 會被當做引數傳遞給 entrypoint 執行。因此 `CMD ["catalina.sh" "run"]` 實際上交由 bash 去執行 catalina 。而在 run 指令中指定的指令引數,也會被傳遞給 entrypoint, **覆蓋** 原有的 CMD 。這就是所謂的 CMD 可省略,是因為原有指定。
    Dffcc
        8
    Dffcc  
    OP
       284 天前
    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 的默認參數使用。

    谢谢你,理解了
    Dffcc
        9
    Dffcc  
    OP
       283 天前
    @LemonPrefect docker top mytom ,可以查看容器的指定进程是否有执行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1100 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.