【问题标题】:Docker folder gets duplicated in containerDocker 文件夹在容器中重复
【发布时间】:2020-12-30 09:08:47
【问题描述】:

有这个 Dockerfile

Dockerfile

FROM python:3.8
ADD Pipfile.lock /app/Pipfile.lock
ADD Pipfile /app/Pipfile

WORKDIR /app
COPY . /app

RUN pip install pipenv
RUN pipenv install --system --deploy --ignore-pipfile
ENV FLASK_APP=app/http/api/endpoints.py
ENV FLASK_RUN_PORT=4433
ENV FLASK_ENV=development
ENTRYPOINT ["python"] 
CMD ["-m", "flask", "run"]

为什么我的应用会在 Docker 容器中运行

/app/app/http/api

应用被重复

如何复制到:

/app/http/api

我该如何解决?

更新 1:

我的 docker-compose 和 Dockerfile 和 ls 输出。

https://0bin.net/paste/ePRws72M#IV8H6iRJ+UMJFr8lB7CRQYKwsnGYflsmOlyvFxZA7zE

【问题讨论】:

  • .在宿主机上的目录结构是什么样的?你有没有机会像./app/http/... 这样的结构或者你在复制命令中切换了源和目标? COPY . /app 将主机当前目录中的任何内容复制到容器中的/app
  • 是的,就是这样。那么如何更正Dockerfile呢?
  • COPY ./app /app
  • 谢谢。但它仍然无法正常工作。如果我删除了它正确复制的卷,但 Flask 不响应请求,则不起作用:/
  • 它确实复制正确,但是在您的 docker compose 文件中,您将主机上的当前目录安装到安装点 /app 下的容器中,这当然隐藏了现有的 /app 目录容器...如果您在容器内执行ls /app,您会看到,它的内容与您在主机上的项目目录完全相同...

标签: docker docker-compose dockerfile


【解决方案1】:

这里有两个问题

  1. copy . /app 将整个工作目录从主机复制到图像中的/app 目录中。如果您只想将 ./app 子目录更改为 copy ./app /app

  2. 您的 docker-compose 将主机的当前工作目录挂载到挂载点 /app 下的容器中。这隐藏了图像的现有目录/app。所以你要么需要将你的应用复制到不同的目录,要么为你的卷使用不同的挂载点

【讨论】:

  • 感谢您的帮助。这有效:0bin.net/paste/… 有没有办法不使用两个 Dockerfile ?即Dockerfile和Dockerfile1?
猜你喜欢
  • 2022-01-10
  • 2016-09-18
  • 2018-02-08
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多