将用户提供的docker build参数传递给python程序

问题描述 投票:0回答:2

我正在尝试将用户输入作为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 build -t passarg:1 --build-arg number = 1。

Docker运行命令:

docker run passarg:1

错误:

用法:app.py [-h]号

app.py:错误:以下参数是必需的:数字

python python-3.x docker dockerfile argparse
2个回答
0
投票

构建参数会在构建完成后超出范围。这样,在运行命令时(当您尝试启动容器时),该参数没有值。而是使用保持其值的环境变量。如果您仍然想使用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

0
投票

误读,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

© www.soinside.com 2019 - 2024. All rights reserved.