Lig*_*244 2 docker docker-compose
我在 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
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
总结评论中的讨论:
RUN指令无法访问卷,因为它尚未安装。Docker 仅创建构建上下文,这是使用 ADD 指令所必需的。但通过这种方式,文件将保留在已编译的容器中,因此您将需要重建来更新这些文件。
构建完成后,由“build:”触发。在 docker-compose.yml 中,docker 启动容器并添加卷。但就你的情况来说已经太晚了。
建议的机制是使用ENTRYPOINT和 scipt 来启动你的东西。它在启动阶段的构建之后执行,因此您可以访问该卷。
另一种方法,在我看来更干净一些,是使用docker-compose 的命令指令。您可以将相同的脚本放入其中。这取决于您进行部署的方式以及在开发环境中使用 docker 的方式。
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |