如何將命令列引數傳遞給 Python Docker 容器?


在深入瞭解Docker容器引數之前,我們必須瞭解Python命令列引數以及開發者如何訪問它們。當我們希望在程式外部控制Python指令碼時,命令列引數非常有用。

訪問Python指令碼的命令列引數

步驟1:建立一個Python指令碼main.py

示例

# sys will allow us to access the passed arguments import sys # sys.argv[0] access the first argument passed that is the python script name print("\nFile or Script Name is :", sys.argv[0]) # print arguments other than the file name print("\nArguments passed:", end = " ") for i in range(1, len(sys.argv)): print(sys.argv[i], end = " ") # Lowercase operation on the passed arguments for i in range(1, len(sys.argv)): print(sys.argv[i].lower(), end = " ")

步驟2:使用引數在終端執行

#python3 main.py HELLO THIS IS TUTORIALSPOINT

輸出

File or Script Name is : main.py
Arguments passed: HELLO THIS IS TUTORIALSPOINT
hello this is tutorialspoint

將這些引數傳遞給Docker容器

我們有不同的方法可以將命令列引數傳遞給Docker容器。下面逐步介紹其中一些方法。

使用Docker引數和ENTRYPOINT

技巧是使用entrypoints和Dockerfile,並將該entrypoint重定向到Python檔案的執行。之後,只需在執行Docker容器的過程中傳遞所需的Python引數。

步驟1:建立一個Dockerfile

示例

FROM python WORKDIR /app COPY . /app/ ENTRYPOINT ["python3", "main.py"]

步驟2:構建映象

示例

#docker build -t arg_py .

輸出

Sending build context to Docker daemon 8.192kB
Step 1/4 : FROM python
---> fa9122485d1d
Step 2/4 : WORKDIR /app
---> Using cache
---> 9e9708fe1d43
Step 3/4 : COPY . /app/
---> aea9ecf32f55
Step 4/4 : ENTRYPOINT ["python3", "main.py"]
---> Running in 864440fa7988
Removing intermediate container 864440fa7988
---> d6e31e5606b8
Successfully built d6e31e5606b8
Successfully tagged arg_py:latest

步驟3:執行容器

#docker run --name mycontainer arg_py HELLO FROM TUTORIALSPOINT

示例

File or Script Name is : main.py Arguments passed: HELLO FROM TUTORIALSPOINT hello from tutorialspoint

使用Docker環境變數和ENTRYPOINT

Docker run命令為我們提供了一些非凡的功能,其中之一是環境變數。在這裡,我們將使用這些環境變數將資料傳遞到Docker容器內的Python指令碼。

步驟1:建立一個用於訪問環境變數的Python指令碼

這次建立Python指令碼將與第一個示例非常相似。我們將匯入“os”模組來獲取環境變數,而不是匯入“sys”模組。建立一個Python檔案並貼上以下程式碼。

示例

import os #declare some variables for environment variable #os.getenv will fetch the environment variables from the container. userName = os.getenv("User_Name") passWord = os.getenv("Pass_Word") #Now print the variables that has been fetched. print("Running with user: %s" % userName) print("Your password: %s" % passWord) #Apply some operation print(userName.upper()) print(passWord.upper())

將上述檔案儲存為main.py

步驟2:構建Dockerfile

構建Dockerfile以使用此Python程式碼建立新的映象。此Dockerfile與我們之前建立的相同,只是main.py中的Python程式碼已更改。

示例

#docker build -t env_img .

輸出

Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM python
---> fa9122485d1d
Step 2/4 : WORKDIR /app
---> Using cache
---> 9e9708fe1d43
Step 3/4 : COPY . /app/
---> 31f98d53c161
Step 4/4 : ENTRYPOINT ["python3", "main.py"]
---> Running in bec1681a6842
Removing intermediate container bec1681a6842
---> 5dd89b0c7985
Successfully built 5dd89b0c7985
Successfully tagged env_img:latest

步驟3:執行容器

在執行容器時使用Python指令碼中提到的環境變數。“Docker run”有一個“-e”標誌來指定任何環境變數,我們可以一次指定多個環境變數。

示例

#docker run -e User_Name="TutorialsPoint" -e Pass_Word="secret" --name env_cont env_img

輸出

Running with user: TutorialsPoint
Your password: secret
TUTORIALSPOINT
SECRET

這就是我們如何在Docker客戶端的幫助下,將命令列引數和環境變數傳遞給在Docker守護程式上執行的Python容器。

更新於:2024年5月31日

14K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告