首页 > 解决方案 > 基本 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'

建议?

标签: pythonmacosdockerbindmount

解决方案


您的问题是 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 .

您可能已经考虑过这些或有更好的解决方案,如果我能澄清这些建议中的任何一个,请告诉我。谢谢!


推荐阅读