docker mounting volume with permission denied
我正在尝试设置一个从主机挂载卷的Docker容器。无论我尝试什么,当我远程进入Docker容器时,总会说权限被拒绝。这是我尝试添加到Docker文件中的一些命令:
1 | RUN su -c"setenforce 0" |
和
1 | chcon -Rt svirt_sandbox_file_t /app |
当我远程进入容器时仍然出现以下错误:
Error: EACCES: permission denied, scandir '/app'
at Error (native)Error: EACCES: permission denied, open 'npm-debug.log.578996924'
at Error (native)
正如您所看到的,应用程序目录已分配给具有uid 1000的某个用户:
这是我的docker文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | FROM php:5.6-fpm # Install modules RUN apt-get update && apt-get install -y \\ git \\ unzip \\ libmcrypt-dev \\ libicu-dev \\ mysql-client \\ freetds-dev \\ libxml2-dev RUN apt-get install -y freetds-dev php5-sybase # This symlink fixes the pdo_dblib install RUN ln -s /usr/lib/x86_64-linux-gnu/libsybdb.a /usr/lib/ RUN docker-php-ext-install pdo \\ && docker-php-ext-install pdo_mysql \\ && docker-php-ext-install pdo_dblib \\ && docker-php-ext-install iconv \\ && docker-php-ext-install mcrypt \\ && docker-php-ext-install intl \\ && docker-php-ext-install opcache \\ && docker-php-ext-install mbstring # Override the default php.ini with a custom one COPY ./php.ini /usr/local/etc/php/ # replace shell with bash so we can source files RUN rm /bin/sh && ln -s /bin/bash /bin/sh # nvm environment variables ENV NVM_DIR /usr/local/nvm ENV NODE_VERSION 4.4.7 # install nvm RUN curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash # install node and npm RUN source $NVM_DIR/nvm.sh \\ && nvm install $NODE_VERSION \\ && nvm alias default $NODE_VERSION \\ && nvm use default # add node and npm to path so the commands are available ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH # confirm installation RUN node -v RUN npm -v # Install Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN composer --version # Configure freetds ADD ./freetds.conf /etc/freetds/freetds.conf WORKDIR /app # Gulp install RUN npm install -g gulp RUN npm install -g bower CMD ["php-fpm"] |
这是我的docker-compose:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | nginx_dev: container_name: nginx_dev build: docker/nginx_dev ports: -"80:80" depends_on: - php_dev links: - php_dev volumes: - ./:/app php_dev: container_name: php_dev build: docker/php-dev volumes: - ./:/app` |
是否可以运行任何命令来授予root用户访问应用程序目录的权限?我也在使用docker-compose。
从目录列表中,您似乎已经配置了selinux(这是权限位上的尾随点)。在启用了selinux的Docker中,您需要使用额外的标志
您生成的docker-compose.yml应该如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | version: '2' services: nginx_dev: container_name: nginx_dev build: docker/nginx_dev ports: -"80:80" depends_on: - php_dev links: - php_dev volumes: - ./:/app:z php_dev: container_name: php_dev build: docker/php-dev volumes: - ./:/app:z |
注意,我也将语法更新为版本2。docker-compose.yml的版本1正在逐步淘汰。默认情况下,版本2将导致容器在其自己的网络中运行,通常这是首选方法,但是如果您有其他容器尝试与之通信,则可能会导致问题。