将一个空值传递给 Docker 的构建参数



假设我有这个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命令中传递空参数。

最新更新