我正在尝试将用户输入作为Dockerfile的构建参数,并尝试将其传递给python程序。这是我的用例:
Dockerfile :
FROM centos:7
USER root
RUN yum install -y python36-devel python36-pip
ARG number
COPY . /app
RUN ls -l /app
RUN echo ${number}. <=================This displays output in Docker build console
CMD python3 /app/app.py -t ${number}
app.py
import argparse
import time
def input():
parser = argparse.ArgumentParser()
parser.add_argument('number', help='take program number as input')
args = parser.parse_args()
return args
def root(args):
for i in range(10):
print("Hello World from : " + str(args.number))
time.sleep(2)
if __name__ == "__main__":
args = input()
root(args)
Docker构建命令:
Docker运行命令:
错误:
用法:app.py [-h]号
app.py:错误:以下参数是必需的:数字
构建参数会在构建完成后超出范围。这样,在运行命令时(当您尝试启动容器时),该参数没有值。而是使用保持其值的环境变量。如果您仍然想使用build参数,可以执行以下操作:
FROM centos:7
USER root
RUN yum install -y python36-devel python36-pip
ARG number
ENV num ${number}
COPY . /app
RUN ls -l /app
RUN echo ${number}. <=================This displays output in Docker build console
CMD python3 /app/app.py -t $num
误读,ENV和ARG参数,可以使用运行时参数来解决:
FROM centos:7
USER root
RUN yum install -y python36-devel python36-pip
COPY . /app
RUN ls -l /app
ENTRYPOINT ["python","/app/app.py"]
Docker运行命令:
$ docker run -it passarg:1 1