【问题标题】:docker mounting volume with permission denieddocker安装卷被拒绝
【发布时间】:2017-10-23 16:05:31
【问题描述】:

我正在尝试设置一个从主机安装卷的 docker 容器。无论我尝试什么,当我远程进入 docker 容器时,它总是说权限被拒绝。这是我尝试添加到 docker 文件中的一些命令:

RUN su -c "setenforce 0"

chcon -Rt svirt_sandbox_file_t /app

当我远程进入我的容器时,我仍然收到以下错误:

错误:EACCES:权限被拒绝,scandir '/app' 在错误(本机)

错误:EACCES:权限被拒绝,打开“npm-debug.log.578996924” 在错误(本机)

如您所见,应用程序目录分配给了某个 uid 为 1000 的用户:

这是我的 docker 文件:

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:

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,这可能会导致问题。尝试先禁用它,看看是否有任何改进。我认为我们还需要查看您的 docker-compose.yml。
  • @BMitch 我添加了我的 docker-compose.yml

标签: linux docker permissions centos docker-compose


【解决方案1】:

从目录列表中,您似乎已经配置了 selinux(即权限位上的尾随点)。在启用了 selinux 的 Docker 中,您需要使用额外标志 :z 挂载卷。 Docker 将其描述为 volume label,但我相信这是一个 selinux 术语,而不是卷上的 docker 标签。

生成的 docker-compose.yml 应如下所示:

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 将导致容器默认在自己的网络中运行,这通常是首选,但如果您有其他容器尝试与这些容器通信,则可能会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多