【问题标题】:How to create the directory in a Dockerfile如何在 Dockerfile 中创建目录
【发布时间】:2021-07-15 17:57:54
【问题描述】:

我很难在下面的 Dockerfile 中创建一个目录。构建镜像后进入容器我找不到目录“models”。路径“/usr/src/app/ds/models”中的“ds”目录是复制的应用程序目录。你能告诉我这里有什么问题吗?

FROM python:3.8
ENV PYTHONUNBUFFERED=1
ENV DISPLAY :0

WORKDIR /usr/src/app
COPY . .
RUN mkdir -p /usr/src/app/ds/models

我的 docker-compose.yaml 文件包含卷:

version: '3.8'

services:
  app:
    build: .
    command:
      - /bin/bash
      - -c
      - python manage.py runserver 0.0.0.0:8000
    restart: always
    volumes:
      - .:/usr/src/app
    ports:
      - '8000:8000'

【问题讨论】:

  • 找不到/usr/src/app/test
  • 如果在构建过程中没有抛出错误,/usr/src/app/test 应该在那里
  • Alberto,没有错误,但是在复制我的应用程序的文件夹后,我无法创建子文件夹,在运行的容器中它不存在
  • 你能不能把整个 docker-compose 也给我
  • 您正在将当前目录映射到 /usr/src/app 中,这会隐藏您创建的目录。

标签: docker dockerfile mkdir


【解决方案1】:

当您的 docker-compose.yml 文件显示时

volumes:
  - .:/usr/src/app

该主机目录完全替换了图像中的/usr/src/app 目录。这意味着 Dockerfile 中几乎没有任何影响;如果您尝试将此设置部署到另一个系统,则您从未运行过映像中的代码。

我建议删除此块以及 command: 覆盖(改为将其设置为 Dockerfile 中的默认 CMD)。

我需要下载模型到这个目录

仅将您需要的特定目录挂载到容器中;不要覆盖整个应用程序树。可能考虑将该数据目录保存在文件系统的不同部分。

version: '3.8'
services:
  app:
    build: .
    # no command:
    restart: always
    volumes:
      # only the models subdirectory, not the entire application
      - ./ds/models:/usr/src/app/ds/models
    ports:
      - '8000:8000'

【讨论】:

  • 感谢您的回复。您能否根据 docker-compose 文件重构我的 Dockerfile。似乎我必须在 Dockerfile 中创建本地目录“./ds/models:”
  • WORKDIR /usr/src/app RUN mkdir -p /usr/src/app/ds/models COPY . . 所以,我必须先创建一个子文件夹,然后再复制其他应用文件夹?
  • ./ds/models 目录在您的主机系统上。 volumes: 声明将在容器内创建该目录和 /usr/src/app/ds/models,如果其中一个或两者都不存在。您需要对 Dockerfile 进行的唯一更改是以 CMD python manage.py runserver 0.0.0.0:8000 结尾。
猜你喜欢
  • 2018-10-22
  • 2019-06-15
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多