簡體   English   中英

需要通過 Kubernetes 容器中的命令進行輸入

[英]Need input with passing commands in Kubernetes containers

以下三個傳遞命令/參數的聲明有什么區別:

  1. 容器:
    名稱:忙箱
    圖片:忙箱
    參數:
    -睡覺
    -“1000”

  2. 容器:
    名稱:忙箱
    圖片:忙箱
    命令:[“/bin/sh”,“-c”,“睡眠 1000”]

  3. 容器:
    名稱:忙箱
    圖片:忙箱
    參數:
    -睡覺
    -“1000”

A. 這些會產生相同的結果嗎?
B. 每個人的偏好或用途是什么?

YAML 列表定義只是一個口味問題,它只是一個 YAML 語法。 這兩個例子是等價的:

listOne:
- item1
- item2
listTwo: ['item1', 'item2']

這種語法適用於argscommand 除此之外, argscommand略有不同,如文檔所述:

  • 如果您不為容器提供命令或參數,則使用 Docker 映像中定義的默認值
  • 如果您為容器提供命令但沒有參數,則僅使用提供的命令。 忽略 Docker 映像中定義的默認 EntryPoint 和默認 Cmd。
  • 如果您只為容器提供參數,則 Docker 映像中定義的默認入口點將使用您提供的參數運行。
  • 如果您提供命令和參數,則會忽略 Docker 映像中定義的默認入口點和默認 Cmd。 您的命令使用您的參數運行。

想象一個像mysql這樣的容器,如果你看它是 Dockerfile 你會注意到:

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]

入口點調用一個腳本,准備數據庫所需的一切,完成后,該腳本調用exec "$@"和 shell 變量$@cmd中定義的所有內容。

因此,在 Kubernetes 上,如果您想將 arguments 傳遞給mysqld ,您可以執行以下操作:

image: mysql
args:
- mysqld
- --skip-grant-tables
# or args: ["mysqld", "--skip-grant-tables"]

這仍然會執行入口點,但現在$@的值是mysqld --skip-grant-tables

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM