美文网首页开发应用容器技术
二十二、Dockerfile-容器启动命令ENTRYPOINT及

二十二、Dockerfile-容器启动命令ENTRYPOINT及

作者: InsaneLoafer | 来源:发表于2021-12-10 16:23 被阅读0次

    容器启动命令ENTRYPOINT

    ENTRYPOINT 也可以设置容器启动时要执行的命令,但是和CMD是有区别的。

    CMD 设置的命令,可以在docker container run 时传入其它命令,覆盖掉 CMD 的命令,但是 ENTRYPOINT 所设置的命令是一定会被执行的。

    ENTRYPOINTCMD 可以联合使用,ENTRYPOINT 设置执行的命令,CMD传递参数

    FROM ubuntu:21.04
    CMD ["echo", "hello docker"]
    

    把上面的Dockerfile build成一个叫 demo-cmd 的镜象

    $ docker image ls
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    demo-cmd          latest    5bb63bb9b365   8 days ago   74.1MB
    
    FROM ubuntu:21.04
    ENTRYPOINT ["echo", "hello docker"]
    

    build成一个叫 demo-entrypoint 的镜像

    $ docker image ls
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    demo-entrypoint   latest    b1693a62d67a   8 days ago   74.1MB
    

    CMD的镜像,如果执行创建容器,不指定运行时的命令,则会默认执行CMD所定义的命令,打印出hello docker

    $ docker container run -it --rm demo-cmd
    hello docker
    

    但是如果我们docker container run的时候指定命令,则该命令会覆盖掉CMD的命令,如:

    $ docker container run -it --rm demo-cmd echo "hello world"
    hello world
    

    但是ENTRYPOINT的容器里ENTRYPOINT所定义的命令则无法覆盖,一定会执行

    $ docker container run -it --rm demo-entrypoint
    hello docker
    $ docker container run -it --rm demo-entrypoint echo "hello world"
    hello docker echo hello world
    $
    

    Shell 格式和 Exec 格式

    CMDENTRYPOINT同时支持shell格式和Exec格式。

    Shell格式

    CMD echo "hello docker"
    
    ENTRYPOINT echo "hello docker"
    

    Exec格式

    以可执行命令的方式

    ENTRYPOINT ["echo", "hello docker"]
    
    CMD ["echo", "hello docker"]
    

    注意shell脚本的问题

    FROM ubuntu:21.04
    ENV NAME=docker
    CMD echo "hello $NAME"
    

    假如我们要把上面的CMD改成Exec格式,下面这样改是不行的, 大家可以试试。

    FROM ubuntu:21.04
    ENV NAME=docker
    CMD ["echo", "hello $NAME"]
    

    它会打印出 hello $NAME , 而不是 hello docker ,那么需要怎么写呢? 我们需要以shell脚本的方式去执行

    FROM ubuntu:21.04
    ENV NAME=docker
    CMD ["sh", "-c", "echo hello $NAME"]
    

    相关文章

      网友评论

        本文标题:二十二、Dockerfile-容器启动命令ENTRYPOINT及

        本文链接:https://www.haomeiwen.com/subject/ojbgxrtx.html