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

2024-05-20 00:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将用户输入作为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:错误:需要以下参数:number


Tags: dockerruninpyimportdockerfilebuildapp
2条回答

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

生成完成后,生成参数将超出范围。因此,当命令运行时(当您尝试启动容器时),参数没有值。而是使用一个保持其值的环境变量。 如果仍要使用生成参数,可以执行以下操作:

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

相关问题 更多 >