据我所知,为了查看 Docker 内部工作目录中的变化,docker-compose.yml
您需要将卷映射到您要工作的目录。
目前我有这个
web:
build: .
ports:
- "8080:8080"
volumes:
- .:/data/app
因此,我将我的机器目录映射.
到文件夹中的容器data/app
,但如果我这样做,我会收到此错误:
ERROR: for web Cannot start service web: oci runtime error: container_linux.go:247: starting container process caused "exec: \"bin/develop.sh\": stat bin/develop.sh: no such file or directory"
ERROR: Encountered errors while bringing up the project.
如果我不设置标签,volumes
容器实际上就会启动,并且我对目录所做的任何更改都不会传输到容器中。
web:
build: .
ports:
- "8080:8080"
笔记:完全相同的配置在我同事的机器、服务器,甚至我的 Mac 上都能正常工作,但唯一出现问题的是volumes
我的 ubuntu 机器,我不明白为什么。
运行的 Docker 版本Ubuntu 16.10
:
Docker version 17.04.0-ce, build 4845c56
docker-compose version 1.11.2, build dfed245
更新
因为CMD
我有这个,./bin/start.sh
它包含
#!/usr/bin/env bash
/usr/bin/supervisord -c ./config/supervisord.conf
在 Docker 文件中我有这个
ENV APP_DIR /data/app/
WORKDIR $APP_DIR
容器内的工作目录为:/data/app
。
答案1
您可能希望将其替换.
为要安装到容器中的完整路径。
使用包含在您的图像中的启动脚本来构建图像也可能是值得的(或者,如果您的脚本与您在问题中显示的相同,则只需将 Supervisord 作为您的运行CMD
,而不使用脚本)。
答案2
当您的 Dockerfile 中创建了主机目录中不存在的文件时,就会发生这种情况bin/develop.sh
。另一种可能性是,主机上的脚本可能有 Windows 换行符,因此会/bin/sh
查找/bin/sh<cr>
不存在的后续文件。