使用json文件作为变量运行docker映像

tuwxkamq  于 2023-02-11  发布在  Docker
关注(0)|答案(2)|浏览(123)

我有下面的Docker图像

FROM python:3.8-slim

WORKDIR /app

# copy the dependencies file to the working directory
COPY requirements.txt .
COPY model-segmentation-512.h5 .
COPY run.py .

# TODO add python dependencies

# install pip deps
RUN apt update
RUN pip install --no-cache-dir -r requirements.txt

RUN mkdir /app/input
RUN mkdir /app/output

# copy the content of the local src directory to the working directory
#COPY src/ .

# command to run on container start
ENTRYPOINT [ "python", "run.py"]

然后,我想使用以下命令运行我的映像,其中json_file是一个文件,我可以随时在我的计算机上更新它,run.py将读取该文件以导入python脚本所需的所有参数:

docker run -v /local/input:/app/input -v /local/output:/app/output/ -t docker_image python3 run.py model-segmentation-512.h5 json_file.json

但是当我这样做的时候,我得到了一个FileNotFoundError: [Errno 2] No such file or directory: 'path/json_file.json',所以我想我没有正确地引入我的json文件。我应该做些什么来允许我的docker映像在我每次运行的时候读取一个更新的json文件(就像一个变量一样)?

j2qf4p5b

j2qf4p5b1#

我认为你使用ENTRYPOINT的方式是错误的。请参阅this question并阅读更多关于ENTRYPOINT和CMD的信息。简而言之,当你运行docker时,你在图像名称后指定的内容将作为CMD传递,而方法将作为参数列表传递给ENTRYPOINT。请参阅下一个示例:
停靠文件:

FROM python:3.8-slim

WORKDIR /app

COPY run.py .

ENTRYPOINT [ "python", "run.py"]

run.py:

import sys

print(sys.argv[1:])

运行时:

> docker run -it --rm run-docker-image-with-json-file-as-variable arg1 arg2 arg3
['arg1', 'arg2', 'arg3']

> docker run -it --rm run-docker-image-with-json-file-as-variable python3 run.py arg1 arg2 arg3
['python3', 'run.py', 'arg1', 'arg2', 'arg3']
njthzxwz

njthzxwz2#

使用类似-v $(pwd)/json_file.json:/mapped_file.json的方法将json文件Map到容器中,并将Map的文件名传递给程序,这样就得到了

docker run -v $(pwd)/json_file.json:/mapped_file.json -v /local/input:/app/input -v /local/output:/app/output/ -t docker_image python3 run.py model-segmentation-512.h5 /mapped_file.json

相关问题