我如何让我的docker卷同步到我的文件系统并允许从docker build写入

时间:2019-12-19 22:24:57

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

我正在使用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行中注释掉,该行允许显示所有资产和捆绑包。

2 个答案:

答案 0 :(得分:0)

您可以将本地文件夹安装到Docker映像中。只需在--mount命令中使用docker run选项。在以下示例中,当前目录将在您的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/

答案 1 :(得分:0)

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

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寻找一个更好的解决方案,但这又是另一天的工作。