我努力在下面的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'
2条答案
按热度按时间kuuvgm7e1#
当您的
docker-compose.yml
文件显示该主机目录将完全替换映像中的
/usr/src/app
目录。这意味着你的Dockerfile中几乎没有任何东西会产生影响;如果您尝试将此安装程序部署到另一个系统,您将永远不会运行映像中的代码。我建议删除这个块,以及
command:
覆盖(使其成为Dockerfile中的默认CMD
)。我需要将模型下载到此目录
只将你需要的特定目录挂载到你的容器中;不要覆盖整个应用程序树。可以考虑将数据目录保存在文件系统不同部分。
qnakjoqk2#
这里有一件事我们需要注意的是Docker构建总是使用Shell在Docker构建过程中连接和执行命令到容器中,我在尝试运行bash兼容命令时观察到问题,比如如果你想以bash兼容的方式创建目录
上面的命令将创建一个名为
IF目标是在单个命令中创建多个目录,因此其bash兼容命令shell将不支持这种方式,以便在docker构建中运行bash兼容命令,您可能需要添加如下内容
上面将创建三个目录。
结论要在Docker build中运行兼容Bash的命令,请在RUN命令中添加bash -c