【问题标题】:Why would you use a shared volume and also copy the project directory in Docker Compose为什么要使用共享卷并在 Docker Compose 中复制项目目录
【发布时间】:2020-10-03 00:47:18
【问题描述】:

我正在关注this tutorial 使用 Docker Compose 部署 Django 应用程序。它表明在我的 Dockerfile 中我应该有(为清楚起见而缩写):

WORKDIR /usr/src/app
COPY . .

本地目录是 Django 项目根目录。而且在我的 docker-compose.yml 中(在项目根目录的父目录中)我应该有这一行

volumes:
  - ./app/:/usr/src/app/

其中 ./app/ 是项目根目录,相对于 docker-compose.yml。通过阅读,docker-compose 中的 volumes 行应该使我的主机目录 ./app/ 在 /usr/src/app/ 的容器中可用。测试似乎也证实了这一点。

在这种情况下,COPY . . 行的意义何在?实际上超出了这一点,为什么它不抛出错误?它似乎在复制一个目录。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    在教程开始的时候,写的只是假装运行 Dockerfile 和 docker-composer 没有 entrypoint.sh 然后没有必要使用:COPY . .

    但是,当您继续阅读时,Dockerfile 中有一点需要在 de Container Docker 中包含 Django 的代码。 我正在谈论的那一行以ENTRYPOINT ["/usr/src/app/entrypoint.sh"]结束。

    所以如果COPY . .不存在,镜像构建会抛出错误。

    我希望你明白我的意思。

    【讨论】:

    • 当我删除 COPY 指令时,即使 ENTRYPOINT 指令完好无损,部署仍然有效。这对我正在阅读的有关卷的内容是有道理的,因为 /usr/src/app 应该只是主机 /app 目录的挂载,不是吗?
    • 你是对的,但 docker 的调用顺序是主要区别。它首先会构建映像,然后它将使用 docker-compose 挂载卷。
    • 好的,好的。那么docker-compose中的volume指令是否只是用宿主文件夹的挂载覆盖容器目录/usr/src/project?
    • 是的;它否定了 Dockerfile 在目录中所做的工作,并使您的映像依赖于您运行它的主机系统。
    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多