如何将命令行参数传递给Python的Docker容器?
在介绍如何传递Docker容器的参数之前,我们必须了解Python命令行参数及其如何被开发人员访问。当我们希望外部程序控制Python脚本时,命令行参数非常有用。
访问Python脚本的命令行参数
第1步:创建Python脚本main.py
示例
# sys可以让我们访问传递的参数
import sys
# sys.argv[0]访问传递的第一个参数,即Python脚本名称
print("\n文件或脚本名称为:", sys.argv[0])
# 输出除文件名之外的参数
print("\n传递的参数:", end = " ")
for i in range(1, len(sys.argv)):
print(sys.argv[i], end = " ")
# 对传递的参数进行小写操作
for i in range(1, len(sys.argv)):
print(sys.argv[i].lower(), end = " ")
第2步:使用参数在终端上运行
#python3 main.py HELLO THIS IS TUTORIALSPOINT
输出
文件或脚本名称为: main.py
传递的参数: HELLO THIS IS TUTORIALSPOINT
hello this is tutorialspoint
将这些参数传递给Docker容器
有不同的方法可以将命令行参数传递给Docker容器。下面是一些逐步表示的方法。
使用ENTRYPOINT的Docker参数
技巧是使用entrypoints和dockerfile,将entrypoint重定向到Python文件执行。之后,只需在运行Docker容器的过程中传递所需的Python参数即可。
第1步:创建Dockerfile
示例
FROM python
WORKDIR /app
COPY . /app/
ENTRYPOINT ["python3", "main.py"]
第2步:构建映像
示例
#docker build -t arg_py .
输出
将构建上下文发送到Docker后台程序 8.192kB
第1/4步:FROM python
---> fa9122485d1d
第2/4步:WORKDIR /app
---> 正在使用缓存
---> 9e9708fe1d43
第3/4步:COPY . /app/
---> aea9ecf32f55
第4/4步:ENTRYPOINT ["python3", "main.py"]
---> 正在运行 864440fa7988 中间容器
正在删除中间容器 864440fa7988
---> d6e31e5606b8
构建映像 arg_py 成功
标记 "arg_py:latest" 成功
第3步:运行容器
#docker run --name mycontainer arg_py HELLO FROM TUTORIALSPOINT
示例
文件名或脚本名为:main.py
传递的参数为:HELLO FROM TUTORIALSPOINT
hello from tutorialspoint
使用Docker环境变量与ENTRYPOINT
Docker运行命令提供了一些非凡的功能,其中之一是环境变量。在这里,我们将使用这些环境变量将数据传递到Docker容器内部的Python脚本中。
第1步:创建Python脚本以访问环境变量
这次创建Python脚本与第一个示例非常相似。我们将导入“os”模块获取环境变量,而不是导入“sys”模块。 创建Python文件并粘贴以下代码。
例子
导入 os
#声明一些用于环境变量的变量
#os.getenv会从容器中获取环境变量。
用户名 = os.getenv("User_Name")
密码 = os.getenv("Pass_Word")
#现在打印被获取的变量。
打印("使用用户运行:%s" % 用户名)
打印("您的密码:%s" % 密码)
#应用一些操作
打印(用户名.upper())
打印(密码.upper())
将以上文件保存为main.py
第2步:构建Dockerfile
构建Dockerfile以使用此Python代码创建新的映像。这个Dockerfile与我们之前创建的相同,只是main.py中的Python代码已更改。
例子
#docker build -t env_img .
输出
将构建上下文发送至Docker守护程序3.072kB
步骤1/4:来自Python的FROM
--->fa9122485d1d
步骤2/4:WORKDIR/app
--->正在使用缓存
--->9e9708fe1d43
步骤3/4:复制。/app/
--->31f98d53c161
步骤4/4:ENTRYPOINT [“python3”,“main.py”]
--->正在运行bec1681a6842中的5dd89b0c7985
删除中间容器bec1681a6842
--->5dd89b0c7985
成功构建了5dd89b0c7985标记为env_img:latest
第3步:运行容器
使用Python脚本中提到的环境变量在运行容器时。Docker run有一个“-e”标志可提及任何环境变量,我们可以一次提及多个环境变量。
例子
#docker run -e User_Name="TutorialsPoint" -e Pass_Word="secret" --name env_cont env_img
输出
使用TutorialsPoint用户运行
您的密码:secret
TUTORIALSPOINT
SECRET
这是我们如何通过Docker客户端的帮助将命令行参数和环境变量传递给运行在Docker守护程序上的Python容器。