如何將命令列引數傳遞給 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容器。
廣告