Данный конфиг нормально работает под vagrant, но там какая-то проблема с установкой модулей через npm. Решил перепроверить на нормальном хостинге и на нормальном хостинге npm устанавливается как надо. Однако docker-composer игнорирует директиву user в docker-compose.yml и просто пробрасывает права как есть во внутрь контейнера не изменяя их. Версии композера и докера одинаковые с виртуальной и настоящей vps.
Каждый раз делать chown на хосте под вымышленного пользователя как-то странно. Это похоже на баг.
Dockerfile
FROM php:8.0.12-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libcurl4-openssl-dev \
libpng-dev \
libpq-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install curl zip pdo pgsql pdo_pgsql mbstring exif pcntl bcmath gd intl opcache xml
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# nvm environment variables
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.16.0
ENV NPM_VERSION 7.6.3
SHELL ["/bin/bash", "--login", "-c"]
RUN mkdir -p $NVM_DIR
# Install nvm with node and npm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash \
&& . $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default \
&& npm install npm@$NPM_VERSION -g
ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
#ENV PATH $NVM_DIR:$PATH
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
WORKDIR /var/www
USER $user
docker-compose.yml
version: "3.7"
services:
app:
build:
args:
user: momo
uid: 1000
context: ./dockerfiles
dockerfile: Dockerfile
image: appmail
container_name: appmail-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- appmail
db:
container_name: appmail-db-pgsql
image: postgres:14
env_file: ./.env
environment:
POSTGRES_DB: ${DB_DATABASE}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
PGDATA: /data/postgres14
volumes:
- appmail-db-pgsql14:/data/postgres14
ports:
- ${DB_PORT}:5432
networks:
- appmail
restart: unless-stopped
admin:
image: adminer
restart: always
depends_on:
- db
ports:
- 8082:8080
networks:
- appmail
nginx:
image: nginx:alpine
container_name: appmail-nginx
restart: unless-stopped
ports:
- ${APPLICATION_PORT}:80
#- 433:433
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- appmail
networks:
appmail:
driver: bridge
volumes:
appmail-db-pgsql14:
-rwxrwxr-x 1 1002 1002 4051 Nov 18 07:20 README.md
Должно быть так:
-rwxrwxr-x 1 momo momo 4051 Nov 18 07:20 README.md