假设我有这个python脚本main.py:
import sys
if not sys.argv[1]:
print('Empty')
sys.exit()
print('Otherwise')
如果我像这样运行它python3 main.py'',它会打印空
如果我像这样运行它python3 main.py 45,它会打印否则
现在假设我要构建一个运行这个脚本的Docker镜像。这是我的Dockerfile:
FROM python:3.6-slim
ARG A_VARIABLE
WORKDIR /
COPY main.py /
RUN python3 main.py ${A_VARIABLE}
如果我使用以下命令构建我的映像dockerbuild--build arg A_VARIABLE=45运行良好。
Sending build context to Docker daemon 1.905MB
Step 1/5 : FROM python:3.6-slim
---> c36a97a24d09
Step 2/5 : ARG A_VARIABLE
---> Using cache
---> e9146c21f196
Step 3/5 : WORKDIR /
---> Using cache
---> 942a7511c60d
Step 4/5 : COPY main.py /
---> Using cache
---> 96bd3882233a
Step 5/5 : RUN python3 main.py ${A_VARIABLE}
---> Using cache
---> 4c9f0b1b997c
Successfully built 4c9f0b1b997c
如果我像这样构建它,那么构建arg A_VARIABLE=''它失败了。
Sending build context to Docker daemon 1.905MB
Step 1/5 : FROM python:3.6-slim
---> c36a97a24d09
Step 2/5 : ARG A_VARIABLE
---> Using cache
---> e9146c21f196
Step 3/5 : WORKDIR /
---> Using cache
---> 942a7511c60d
Step 4/5 : COPY main.py /
---> Using cache
---> 96bd3882233a
Step 5/5 : RUN python3 main.py ${A_VARIABLE}
---> Running in e1b5dab971d2
Traceback (most recent call last):
File "main.py", line 2, in <module>
if not sys.argv[1]:
IndexError: list index out of range
The command '/bin/sh -c python3 main.py ${A_VARIABLE}' returned a non-zero code: 1
有什么解决方法可以让我将空值作为构建参数传递吗?
在shell中(因此在DockerfileRUN
语句中(,一个未引用的空变量简单地消失了。
RUN python3 main.py "${A_VARIABLE}"
另请参阅何时在shell变量周围加引号?
import sys
if len(sys.argv) > 1:
print('Empty')
sys.exit()
print('Otherwise')
在python代码中,检查传递的命令行参数数组的长度,而不是使用argv[1]。这样,您就可以在docker命令中传递空参数。