挂载卷时发生 Docker compose 错误

挂载卷时发生 Docker compose 错误

据我所知,为了查看 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>不存在的后续文件。

相关内容