我在docker-compose.yml中定义了一个卷。我想从Dockerfile中的卷中使用这些文件之一,但出现错误:“无此类文件或目录”
如果我创建了无法访问Dockerfile中文件的容器,那么我将从docker-compose.yml文件中特定位置看到该容器中卷中的所有文件。
这是应该如何工作还是我有什么问题吗?我想我缺少什么。
存储库:https://github.com/Lightshadow244/OwnMusicWeb
docker-compose.yml:
version: '3'
services:
ownmusicweb:
build: .
container_name: ownmusicweb
hostname: ownmusicweb
volumes:
- ~/OwnMusicWeb/ownmusicweb:/ownmusicweb
ports:
- 83:8000
tty: true
Dockerfile:
FROM ubuntu:latest
WORKDIR /ownmusicweb
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "python-pip"]
RUN ["pip", "install", "--upgrade", "pip"]
RUN ["pip", "install", "Django", "eyeD3", "djangorestframework", "markdown", "django-filter"]
RUN ["python", "/ownmusicweb/manage.py", "migrate"]
RUN ["python", "/ownmusicweb/manage.py", "runserver", "0.0.0.0:8000"]
答案 0 :(得分:2)
在评论中总结讨论:
RUN 指令无法访问卷,因为尚未安装。 Docker仅创建build context,这是使用ADD指令所必需的。但是通过这种方式,文件将保留在已编译的容器中,因此您将需要重新构建以更新这些文件。
构建完成后,由docker-compose.yml中的“ build:。” 触发,docker启动容器并添加一个卷。但这对您来说太迟了。
建议的机制是将 ENTRYPOINT 与用于启动您的内容的密码一起使用。它是在启动阶段的构建后执行的,因此您可以访问该卷。
另一种方法,在我看来似乎更干净一些,是使用docker-compose的 command 指令。您可以将相同的脚本放入其中。这取决于您进行部署的方式以及在开发环境中使用docker的方式。