如何在Dockerfile中创建目录

j2cgzkjk  于 2023-06-05  发布在  Docker
关注(0)|答案(2)|浏览(671)

我努力在下面的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'
kuuvgm7e

kuuvgm7e1#

当您的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'
qnakjoqk

qnakjoqk2#

这里有一件事我们需要注意的是Docker构建总是使用Shell在Docker构建过程中连接和执行命令到容器中,我在尝试运行bash兼容命令时观察到问题,比如如果你想以bash兼容的方式创建目录

RUN mkdir -p /yourpath/{dir1,dir2,dir3/dir1}

上面的命令将创建一个名为

{dir1,dir2,dir3/dir1

IF目标是在单个命令中创建多个目录,因此其bash兼容命令shell将不支持这种方式,以便在docker构建中运行bash兼容命令,您可能需要添加如下内容

RUN bash -c 'mkdir -p /yourpath/{dir1,dir2,dir3/dir1}'

上面将创建三个目录。

结论要在Docker build中运行兼容Bash的命令,请在RUN命令中添加bash -c

相关问题