docker - 绑定(bind)挂载和卷 : Files do not end up in the container?

标签 docker docker-compose docker-volume

我正在为一个奇怪的问题出汗。我正在将一个文件夹从主机安装到容器(仅用于开发)。该文件夹名为 dj_docker并且有一个文件夹 dj_docker/media与一些 .pdf需要在容器中结束并且其他容器必须可以通过卷 media_volume 访问的文件.但是,一旦我映射子目录 /media到卷(绑定(bind)安装以及卷现在包括文件夹 /media )文件夹的所有内容都消失在容器中。文件夹是空的。

简化的 docker-compose.yml:

version: '3.7'

services:
  restapi:
    volumes: 
      - media_volume:/usr/src/dj/media
      - ./dj_docker:/usr/src/dj/
volumes:
  static_volume:
  media_volume:

如果我省略 docker-compose 文件中的卷,则 .pdf 文件可见并存在于容器中:
    volumes: 
      - ./dj_docker:/usr/src/dj/

有没有办法仍然使用绑定(bind)挂载以及我将文件保存在容器中的卷?

Dockerfile
# pull official base image
FROM python:3.7-alpine

# set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# set work directory
WORKDIR /usr/src/dj

# install psycopg2
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && pip install psycopg2 \
    && apk del build-deps

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/dj/requirements.txt
RUN pip install -r requirements.txt
VOLUME /usr/src/dj/media

# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/dj/entrypoint.sh

# run entrypoint.sh
ENTRYPOINT ["/usr/src/dj/entrypoint.sh"]

最佳答案

Is there a way to still use a bind mount as well as the volume with me keeping the files in the container?



不,这是不可能的。

这和普通的 Un*x 一样安装 (8) (事实上,如果您使用低级工具,您会在 Docker 设置中看到文件系统挂载)。卷挂载完全隐藏了之前目录中的所有内容。如果你有像这样的分层挂载,Docker 在应用之前对它们进行排序,最内层的目录挂载会在下一个最外层的挂载中隐藏该目录中的内容。

这里最容易更改的可能是保存这些数据的容器端目录。我可能会选择像 /media 这样的根目录路径,在您的应用程序的安装树之外。通过环境变量设置位置(在非 Docker 开发环境中不同)。如果种子内容不存在,则在启动时将其复制到那里(现在它不会被卷安装隐藏)。

关于docker - 绑定(bind)挂载和卷 : Files do not end up in the container?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56098135/

相关文章:

mysql - Docker MySQL Github Actions 连接被拒绝

bash - bash脚本在多个docker-compose环境中运行测试

git - 让 git 用户的 sshd 登录转发到(GitLab)Docker 容器

node.js - 远程调试docker容器内运行进程

docker-compose 没有设置环境变量

linux - 如何在网络中公开?

docker - 主机上的Docker卷应该放在哪里?

docker - 与主机数据目录映射时,Docker容器数据为空白

docker - Docker卷偶尔安装得太晚,无法与其他容器共享文件

node.js - Nodemon 不会在 docker 中使用 Express 更改时重新加载文件