【问题标题】:How do I let my docker volume sync to my filesystem and allow writing from docker build如何让我的 docker 卷同步到我的文件系统并允许从 docker build 写入
【发布时间】:2020-04-12 12:24:50
【问题描述】:

我正在使用 docker 构建一个 django 应用程序。我遇到的问题是我的本地文件系统未同步到 docker 环境,因此在重建之前进行本地更改无效。 我加了一卷

 - ".:/app:rw"

它正在同步到我的本地文件系统,但是在构建过程中通过 webpack 构建的包没有被插入(因为它们不在我的文件系统中)

我的 dockerfile 有这个

... setup stuff...

ENV NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules \
    PATH=$NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

ENV PATH=/node_modules/.bin:$PATH

COPY package*.json /
RUN (cd / && npm install && rm -rf /tmp/*)

...pip install stuff...

COPY . /app

WORKDIR /app
RUN npm run build

RUN DJANGO_MODE=build python manage.py collectstatic --noinput

所以我想同步到我的本地文件系统,这样我就可以进行更改并让它们立即显示并让我的包和静态资产存在。到目前为止,我一直在开发的方式是在我的 docker-compose.yml 中注释掉 app:rw 行,它允许所有资产和捆绑包都存在。

【问题讨论】:

    标签: django docker webpack docker-compose docker-volume


    【解决方案1】:

    最终对我有用的解决方案是将卷分配给我不想同步到本地环境的目录。

    volumes:
      - ".:/app/:rw"
      - "/app/project_folder/static_source/bundles/"
      - "/app/project_folder/bundle_tracker/"
      - "/app/project_folder/static_source/static/"
    

    可以说可能有更好的方法来做到这一点,但这个解决方案确实有效。 dockerfile 编译 webpack 并收集静态文件,它在容器中都起作用,上面的最后 3 行可以防止我的本地机器覆盖它们。缺点是我仍然需要为 scss 或 javascript 的实时重新编译找出更好的解决方案,但这是另一天的工作。

    【讨论】:

      【解决方案2】:

      您可以将本地文件夹挂载到您的 Docker 映像中。只需在docker run 命令中使用--mount 选项。在以下示例中,当前目录将在您的 Docker 映像中可用,地址为 /app

      docker run -d \
        -it \
        --name devtest \
        --mount type=bind,source="$(pwd)"/target,target=/app \
        nginx:latest
      

      参考:https://docs.docker.com/storage/bind-mounts/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 2020-12-09
        • 1970-01-01
        相关资源
        最近更新 更多