zoukankan      html  css  js  c++  java
  • 指定 Docker 和 K8S 的命令以及用户

    Dockerfile 中的 CMD 和 ENTRYPOINT

    官网的描述

    The CMD instruction has three forms:
    
    CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form)
    
    ENTRYPOINT has two forms:
    
    ENTRYPOINT ["executable", "param1", "param2"] (exec form, which is the preferred form)
    ENTRYPOINT command param1 param2 (shell form)
    

    CMD 是可执行命令还是参数,取决于有没有定义 ENTRYPOINT
    如果有定义 ENTRYPOINT 那么 CMD 就是 ENTRYPOINT 的参数
    如果没定义 ENTRYPOINT 那么 CMD 就是可执行命令

    CMD 和 ENTRYPOINT 都可以被 docker run 覆盖
    docker run 命令中 image 后面的参数会覆盖 CMD
    docker run 命令中 --entrypoint 的参数可以覆盖 ENTRYPOINT

    docker run --entrypoint=<ENTRYPOINT> <image-tag> <CMD>
    

    Dockerfile 是可以同时指定 CMD 和 ENTRYPOINT 的

    K8S 中的 command 和 args

    command 用于覆盖 Dockerfile 中的 ENTRYPOINT
    args 用于覆盖 Dockerfile 中的 CMD

    如果既没指定 command 也没指定 args,那么使用 Dockerfile 的配置
    如果既有指定 command 也有指定 args,那么忽略 Dockerfile 的配置
    如果只是指定 command 没有指定 args,那么 command 替换 ENTRYPOINT,但是会忽略 CMD
    如果没有指定 command 只是指定 args,那么 args 替换 CMD 作为 ENTRYPOINT 的参数,或者作为可执行命令 (如果没有 ENTRYPOINT)

    Dockerfile 的 USER

    USER 用于指定默认的启动用户,docker run 可以通过 --user 参数改变

    ## 必须指定 uid 而不是用户名,例如 root 的 uid 是 0
    docker run -ti --network=host --entrypoint=<ENTRYPOINT> --user <user-id> <image-tag> <CMD>
    

    如果是进入到容器里,再切用户通常都不好做

    K8S 的 User

    K8S 可以通过 runAsUser 字段,使用 uid,替换 Dockerfile 定义的 USER

    containers:
      - name: ...
        image: ...
        securityContext:
          runAsUser: 0
    


  • 相关阅读:
    C#接口入门学习
    消息队列接收时报错:对消息队列系统的访问被拒绝
    给某做测试的好友的建议
    在不同的Sql Server 数据库服务器(不同机器)导数据。
    如何让开发人员更好测试?
    存储过程初探
    语音报警.NET开发初探
    vs2010下Siverlight开发环境安装
    C# HttpWebRequest 从google服务器获取google的PageRank PR值
    创建进程API CreateProcess Demo
  • 原文地址:https://www.cnblogs.com/moonlight-lin/p/13687907.html
Copyright © 2011-2022 走看看