在Windows上使用Docker-Compose时出现权限被拒绝的问题

5
我正在学习Docker,使用的书籍是《使用Docker》。在第五章中,作者从使用docker run切换到使用docker compose,在我的测试应用程序中产生了“permission denied”错误。有没有什么办法可以让它正常工作?
我使用:
- Windows 10 Home Edition,带有Docker Toolbox - Docker版本为1.12.0 - Docker Compose版本为1.8.0,构建于d988a55
DockerFile:
FROM python:3.4

RUN groupadd -r uwsgi && useradd -r -g uwsgi uwsgi
RUN pip install Flask==0.10.1 uWSGI==2.0.8
WORKDIR /app
COPY app /app
COPY cmd.sh /

EXPOSE 9090 9191
USER uwsgi

CMD ["/cmd.sh"]

docker-compose.yml:

identidock:
  build: .
  ports:
    - "5000:5000"
  environment:
    ENV: DEV
  volumes:
    - ./app:/app

应用程序位于C:/Users/MyUserName下,符合工具箱的要求,以使共享卷正常工作。

工作的Docker命令,启动容器和Web服务器,并成功将其暴露给我的Windows主机:

docker run -e "ENV=DEV" -p 5000:5000 identidock
docker-compose up 命令执行失败,出现以下错误信息:
Starting identidock_identidock_1

ERROR: for identidock  Cannot start service identidock: oci runtime error: exec: "/cmd.sh": permission denied
←[31mERROR←[0m: Encountered errors while bringing up the project.

你会尝试以管理员身份运行它吗? - Rafaf Tahsin
@RafafTahsin 你好。你的意思是以管理员身份运行Docker Quickstart终端吗?我刚试了一下,问题依旧。 - Elegie
请以管理员模式执行您的控制台,然后运行以下命令:docker-compose up from ex - Irwuin
2个回答

8
尝试添加

RUN chmod +x /cmd.sh

在Dockerfile中添加以下内容:
COPY cmd.sh /  

根据该问题,似乎Docker客户端为文件设置所需的执行权限,而Docker Compose没有做到这一点。

可能是Docker客户端为所有文件设置了可执行位,而Compose还没有(至少目前)。


1
谢谢,这个可行!提醒像我这样的初学者:一定要强制重新构建图像才能使它工作。 - Elegie

1
在我的情况下,我需要以管理员身份运行命令行(git bash),然后再次运行:
docker-compose up -d .

这对我很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接