指定 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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM