Django 如何让docker卷同步到文件系统并允许从docker build写入
我正在使用docker构建django应用程序。我遇到的问题是,我的本地文件系统没有同步到docker环境,因此在重建之前,进行本地更改没有任何效果。 我加了一本书Django 如何让docker卷同步到文件系统并允许从docker build写入,django,docker,webpack,docker-compose,docker-volume,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
- ".:/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行,它允许所有资产和捆绑包都存在。您可以将本地文件夹装载到docker映像中。只需在
docker run
命令中使用--mount
选项即可。在以下示例中,当前目录将出现在Docker映像中,地址为/app
docker run -d \
-it \
--name devtest \
--mount type=bind,source="$(pwd)"/target,target=/app \
nginx:latest
参考资料:最终对我有效的解决方案是将一个卷分配给我不想与本地环境同步的目录
volumes:
- ".:/app/:rw"
- "/app/project_folder/static_source/bundles/"
- "/app/project_folder/bundle_tracker/"
- "/app/project_folder/static_source/static/"
也许有更好的方法可以做到这一点,但这个解决方案确实有效。dockerfile编译webpack并收集static,它在容器内和上面的最后3行中都完成了它的工作,防止我的本地计算机覆盖它们。缺点是,我仍然需要为SCS或javascript的实时重新编译找到更好的解决方案,但这是另一天的工作