python - 基本 Docker 绑定挂载故障排除
问题描述
我是 Docker 新手,并试图了解如何将绑定挂载与 Python 脚本一起使用。我正在使用运行 Catalina (10.15.7) 的 Mac。我有一个 Python 脚本,我通常从包含控制脚本的设置的本地 config.ini 文件开始。我想在 Docker 容器中运行 Python 脚本,但让它从我的本地机器访问配置文件。
我的本地目录包含 Dockerfile、requirements.txt 文件、config.ini 文件和一个包含我的 python 文件的子目录 (src)。用于构建镜像的 Dockerfile 如下:
FROM python:3.7
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY src/ .
CMD ["python", "./main.py" ]
构建映像后,我使用以下命令运行它:
docker container run -v $(pwd):/app image_name
这导致错误无法打开文件'./main.py'
建议?
解决方案
您的问题是 Docker 绑定挂载将覆盖容器上目标目录的内容。有关更多信息,请参阅此答案。python /app/main.py
容器启动时,该命令似乎会失败。
下面,我将总结和扩展我的评论。
挂载特定文件
一种可能的快速解决方法可能是将特定文件挂载到/app
您的程序以供读取。
docker run -v $(pwd)/config.ini:/app/config.ini image_name
使用环境变量运行
您提到创建另一个安装点以从中读取/安装配置也可能有效。
除了使用 ENTRYPOINT 命令中的程序参数之外,在运行时设置的另一个选项是使用环境变量。文档中的更多信息
docker run -e "CONFIG_PATH=/app/config/config.ini" image_name
在 Dockerfile 中设置环境变量
当然,您可以使用以下命令将一些环境变量硬编码到您的图像中ENV
:
FROM python:3.7
ENV CONFIG_PATH=/app/config/config.ini
或将其设置为 build-arg:
ARG CONFIG_PATH
ENV CONFIG_PATH=${CONFIG_PATH}
并像这样构建:
docker build --build-arg CONFIG_PATH=/app/config/config.ini .
您可能已经考虑过这些或有更好的解决方案,如果我能澄清这些建议中的任何一个,请告诉我。谢谢!
推荐阅读
- entity-framework - .Error CS1061 '任务
' 不包含 'Where' 的定义,也没有可访问的扩展方法 'Where' - azure-data-factory - ADF 复制活动接收器预复制脚本超时
- r - 如何在R中以数字方式修复拟合概率0或1发生警告
- python - 我无法让 pandas 正确合并我的数据框
- typescript - 打字稿编译什么都不做
- typescript - 使用打字稿在 Expo 40+ 中加载降价文件
- php - 为什么 php 将某些字符转换为“?”
- arduino - 如何让 2 个引脚做同样的事情?
- c++ - C++ 转换 char int ARM
- reactjs - 想要在wavesurfer中给波浪平均高度