【发布时间】:2021-09-15 00:19:58
【问题描述】:
使用 Docker Compose 将 Laravel 应用程序容器化。它只有两个服务:app(运行 PHP8.0-FPM)和nginx。
docker-compose.yml:
version: "3"
services:
app:
build:
args:
USER: novruz
context: ./
dockerfile: Dockerfile
image: blogger
container_name: blogger-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www/
networks:
- laravel
nginx:
image: nginx:alpine
container_name: blogger-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www/
- ./.docker/nginx/:/etc/nginx/conf.d/
networks:
- laravel
networks:
laravel:
driver: bridge
Dockerfile:
FROM php:8.0-fpm
ARG USER
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
zip \
unzip \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install bcmath
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create a system user to run Composer and Artisan commands.
RUN useradd -G www-data,root -d /home/$USER $USER
RUN mkdir -p /home/$USER/.composer \
&& chown -R $USER:$USER /home/$USER
WORKDIR /var/www
USER $USER
这些配置成功构建 (docker-compose build app) 并运行 (docker-compose up -d) 应用程序。
问题
但是当我在app 服务容器中运行composer install --optimize-autoloader --no-dev 时,它会抛出异常:
[RuntimeException]
/var/www/vendor does not exist and could not be created.
这是一个权限问题,但我如何才能为在构建时创建的用户 novruz 授予正确的权限(并添加到组 www-data)?
调试
这是有趣的部分。在我的本地机器(MacBook Air M1 2020)上一切正常,但在 Ubuntu 20.04(Focal Fossa)上却不行。
ls -l 在我的本地机器上输出:
-rw-r--r-- 1 www-data www-data 556 Sep 14 13:53 Dockerfile
-rw-r--r-- 1 www-data www-data 17 Sep 9 07:00 README.md
drwxr-xr-x 7 www-data www-data 224 Sep 7 14:33 app
-rwxr-xr-x 1 www-data www-data 1686 Sep 7 14:33 artisan
drwxr-xr-x 4 www-data www-data 128 Sep 7 14:33 bootstrap
-rw-r--r-- 1 www-data www-data 1766 Sep 9 07:37 composer.json
-rw-r--r-- 1 www-data www-data 338242 Sep 9 07:37 composer.lock
drwxr-xr-x 17 www-data www-data 544 Sep 13 07:22 config
drwxr-xr-x 7 www-data www-data 224 Sep 13 06:45 database
-rw-r--r-- 1 www-data www-data 713 Sep 14 14:32 docker-compose.yml
-rw-r--r-- 1 www-data www-data 1319 Sep 9 07:04 phpunit.xml
drwxr-xr-x 7 www-data www-data 224 Sep 7 14:33 public
drwxr-xr-x 4 www-data www-data 128 Sep 9 07:07 resources
drwxr-xr-x 6 www-data www-data 192 Sep 10 05:52 routes
-rw-r--r-- 1 www-data www-data 563 Sep 7 14:33 server.php
drwxr-xr-x 5 www-data www-data 160 Sep 7 14:33 storage
drwxr-xr-x 7 www-data www-data 224 Sep 9 12:02 tests
如您所见,www-data 是/var/www/ 目录及其中文件的所有者。我可以毫无问题地运行任何命令。
ls -l 在 Ubuntu 20.04 上输出:
-rw-rw-r-- 1 998 997 599 Sep 14 13:41 Dockerfile
-rw-rw-r-- 1 998 997 17 Sep 14 10:16 README.md
drwxrwxr-x 7 998 997 4096 Sep 14 10:16 app
-rwxrwxr-x 1 998 997 1686 Sep 14 10:16 artisan
drwxrwxr-x 3 998 997 4096 Sep 14 10:16 bootstrap
-rw-rw-r-- 1 998 997 1766 Sep 14 10:16 composer.json
-rw-rw-r-- 1 998 997 338242 Sep 14 10:16 composer.lock
drwxrwxr-x 2 998 997 4096 Sep 14 10:16 config
drwxrwxr-x 5 998 997 4096 Sep 14 10:16 database
-rw-rw-r-- 1 998 997 720 Sep 14 10:16 docker-compose.yml
-rw-rw-r-- 1 998 997 1319 Sep 14 10:16 phpunit.xml
drwxrwxr-x 2 998 997 4096 Sep 14 10:16 public
drwxrwxr-x 4 998 997 4096 Sep 14 10:16 resources
drwxrwxr-x 2 998 997 4096 Sep 14 10:16 routes
-rw-rw-r-- 1 998 997 563 Sep 14 10:16 server.php
drwxrwxr-x 5 998 997 4096 Sep 14 10:16 storage
drwxrwxr-x 5 998 997 4096 Sep 14 10:16 tests
但在 Ubuntu 上,用户是 998,组是 997。而且我不断收到运行时异常。为什么会这样?
【问题讨论】:
标签: docker ubuntu docker-compose