【问题标题】:Dockerfile can't copy & Docker-compose volume does not sync with containerDockerfile 无法复制 & Docker-compose 卷不与容器同步
【发布时间】:2020-03-06 21:43:40
【问题描述】:

我正在使用 Docker windows 桌面客户端并尝试构建一个 Flask python 容器。 dockerfile 将requirements.txtflask-script.py 文件复制到python 容器中并进行设置。

|-root directory (this is where the powershell commands are run from)
|-docker-compose.yml
|-src
|  └── Dockerfile
|  ├── flask-script.py
|  ├── requirements.txt

Docker-compose.yml:

version: '3'

services:
  flask-service:
    build: ./src
    volumes:
      - ./src:/usr/src/app
    ports:
      - 8080:80

src/Dockerfile:

FROM python:3

COPY . /usr/src/app

RUN pip install --no-cache-dir -r requirements.txt

CMD [ "python", "./flask-script.py" ]

运行docker-compose up 会出现以下错误:

ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'

但是如果我将 dockerfile 更改为:

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./flask-script.py" ]

它确实有效,但是在docker-compose up 之后,docker-compose 中指定的卷不与容器同步。如果我对 flask-script.py 文件进行任何更改,容器不会看到它们。

我做错了什么?

【问题讨论】:

  • 你打错了,“src”和“scr”不一样。
  • 是的,抱歉在问题中打错了,但文件目录都正确

标签: python docker docker-compose dockerfile docker-volume


【解决方案1】:

当您添加 WORKDIR 时它确实有效,因为您在该目录中拥有所有文件。

但是,在您的第一个 Dockerfile 中,您将所有内容复制到 /usr/src/app,但您没有将工作目录更改为该目录,因此无法访问 requirements.txt,因为它位于 /root/requirements.txt

【讨论】:

  • 谢谢,现在说得通了。您知道为什么更改主机上的 python 不会更改容器中的它吗?
  • @user1031204 理论上看起来不错。也许使用相同的目录作为构建上下文和共享卷在 docker 中搞砸了。
  • 我也是这么想的,并尝试映射一个不同的目录,该目录确实覆盖了卷正确映射的 dockerfile,但遗憾的是,python 文件中的任何更改都没有反映在容器中
  • @user1031204 当你说flask-script.py 中的任何更改都没有被容器看到时,你的意思是你编辑了文件,访问了网站,并且没有看到任何更改吗?如果是这种情况,那是意料之中的。您正在编辑文件,但该进程已在运行。为了检查新的更改,您需要重新运行该过程,但这样做会终止容器,因为该过程已经完成。换句话说,您可以动态编辑 静态 文件,但不能编辑正在运行的进程。
  • 这也是我的想法,但它似乎在这里工作:youtu.be/Qw9zlE3t8Ko?t=381
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2020-06-14
  • 2018-10-28
  • 1970-01-01
相关资源
最近更新 更多