Docker 构建在入口点的 COPY 或 ADD 语句上失败,仅限 Windows

dan*_*sky 7 file-permissions docker docker-compose docker-for-windows

我正在为 Docker 容器创建一个入口点,然后尝试使用docker-compose.yml文件运行它。 这在 Ubuntu 和 OS X 中运行良好,但在 Windows 中出现权限错误(没有太多附加信息)

这是 Dockerfile:

FROM node:6.9

MAINTAINER Some Dude <dude@dude.com>

WORKDIR /opt

# Install Compass
RUN DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade
RUN apt-get -y update
RUN apt-get -y install gcc rubygems ruby-dev
RUN gem update --system
RUN gem install compass

# Install Compass Extensions
RUN gem install compass-blend-modes compass-import-once

# Install glup globally
RUN npm install -g gulp

# Copy the setup file
COPY setup/gulp/docker-gulp-setup.sh /usr/local/bin/docker-gulp-setup.sh
RUN chmod +x /usr/local/bin/docker-gulp-setup.sh

CMD ['gulp']
Run Code Online (Sandbox Code Playgroud)

这是 docker-compose.yml 条目:

version: '2'

services:

        mycontainer-for-gulp:
                build:
                        context: .
                        dockerfile: Dockerfile.gulp
                volumes:
                        - ./:/opt:Z
                command: /usr/local/bin/docker-gulp-setup.sh
Run Code Online (Sandbox Code Playgroud)

这是在 Windows 上运行构建命令时的输出:

? docker-compose build mycontainer-for-gulp
Building mycontainer-for-gulp
Traceback (most recent call last):
 File "<string>", line 3, in <module>
 File "compose\cli\main.py", line 65, in main
 File "compose\cli\main.py", line 117, in perform_command
 File "compose\cli\main.py", line 223, in build
 File "compose\project.py", line 300, in build
 File "compose\service.py", line 742, in build
 File "site-packages\docker\api\build.py", line 55, in build
 File "site-packages\docker\utils\utils.py", line 95, in tar
 File "tarfile.py", line 2023, in add
 File "tarfile.py", line 2052, in addfile
 File "tarfile.py", line 278, in copyfileobj
IOError: [Errno 13] Permission denied
docker-compose returned -1
Run Code Online (Sandbox Code Playgroud)

请注意,它是COPY生成错误的命令,因为我们尝试RUN chmod单独注释掉该命令和语句。

当我运行原始 docker 构建查询时:

docker build -f Dockerfile.gulp .
Run Code Online (Sandbox Code Playgroud)

然后我得到一堆错误输出,因为它试图对当前目录进行 tar 压缩。基本上每个文件添加都会失败。完整输出在这里:

https://gist.github.com/danieltalsky/4cb6bddb6534c46b051230bc45578072

Mar*_*ies 4

当我尝试在应用程序仍在 IDE 中运行时构建 Docker 映像时,我遇到了同样的问题。

确保在构建映像之前关闭您的应用程序