【问题标题】:Docker chown on my machine, but not on the serverDocker chown 在我的机器上,但不在服务器上
【发布时间】:2021-07-23 06:53:14
【问题描述】:

我有 docker-compose.yml 文件

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: pamo/php
    container_name: app
    restart: unless-stopped
    tty: true
    working_dir: /var/www
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      - ./:/var/www
    networks:
      - app-network

  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - .docker/nginx-conf.d/:/etc/nginx/conf.d/
      - .docker/logs/:/var/log/nginx/
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge

这是 Dockerfile

FROM php:7.4-fpm

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
    libonig-dev \
    build-essential \
    libpng-dev \
    libzip-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www


# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000


CMD ["php-fpm"]

在我的本地机器(ARCH,Linux os 5.10.52-1-lts)上,当我运行docker-compose run app ls -l时,输出是:

drwxr-xr-x 39 www 1003   4096 Jul 22 06:08 Modules
-rw-r--r--  1 www 1003    515 Jul 22 18:40 README.md
drwxr-xr-x  3 www 1003   4096 Jul 22 06:08 Themes
drwxr-xr-x  9 www 1003   4096 Jul 22 06:08 app
-rw-r--r--  1 www 1003   1690 Jul 22 06:08 artisan
drwxr-xr-x  3 www 1003   4096 Jul 22 06:08 bootstrap
-rw-r--r--  1 www 1003   2291 Jul 22 07:05 composer.json
-rw-r--r--  1 www 1003 391487 Jul 23 05:56 composer.lock

所以,我的应用运行正常,用户自己的应用是 www。但是在我的服务器(Centos)上,输出如下:

drwxr-xr-x 39 root root   4096 Jul 23 05:41 Modules
-rw-r--r--  1 root root    515 Jul 23 05:43 README.md
drwxr-xr-x  3 root root   4096 Jul 23 05:41 Themes
drwxr-xr-x  9 root root   4096 Jul 23 05:41 app
-rw-r--r--  1 root root   1690 Jul 23 05:41 artisan
drwxr-xr-x  3 root root   4096 Jul 23 05:41 bootstrap
-rw-r--r--  1 root root   2291 Jul 23 05:43 composer.json
-rw-r--r--  1 root root 395282 Jul 23 05:41 composer.lock

我的文件夹应用程序现在归 root 所有,root 是我服务器的当前用户,Dockerfile 中的chown 命令不起作用. 你能告诉我为什么吗?

【问题讨论】:

  • Dockerfile 中的chown 命令无效,因为您有volumes: 隐藏了图像的整个/var/www 目录。这个文件所有权重要吗? (您的应用程序不应该尝试覆盖自己的源代码树?)

标签: php laravel docker docker-compose


【解决方案1】:

使用 whoami 命令确保您不是 root。 如果您不是 root,请尝试通过沿此路径编辑文件为您的帐户授予 root 权限/etc/passwd

【讨论】:

  • 但在我的服务器中,当前用户是 root :|
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多