我有下面的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文件(就像一个变量一样)?
2条答案
按热度按时间j2qf4p5b1#
我认为你使用ENTRYPOINT的方式是错误的。请参阅this question并阅读更多关于ENTRYPOINT和CMD的信息。简而言之,当你运行docker时,你在图像名称后指定的内容将作为CMD传递,而方法将作为参数列表传递给ENTRYPOINT。请参阅下一个示例:
停靠文件:
run.py:
运行时:
njthzxwz2#
使用类似
-v $(pwd)/json_file.json:/mapped_file.json
的方法将json文件Map到容器中,并将Map的文件名传递给程序,这样就得到了