我有以下Dockerfile:
FROM php:8.1-fpm-alpine
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN apk add --no-cache zip mariadb-client npm &&
docker-php-ext-install mysqli pdo pdo_mysql
它似乎安装正确,但NPM命令什么都不做:
/usr/bin $ which node
/usr/bin/node
/usr/bin $ node -v
v18.9.1
/usr/bin $ which npm
/usr/bin/npm
/usr/bin $ npm -v
/usr/bin $
日志中没有显示任何内容来解释它:
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: fpm is running, pid 1
[10-Oct-2022 12:38:52] NOTICE: ready to handle connections
当我在运行compose命令之前设置GID/UID时,问题似乎发生了:
export uid=$(id -u)
export gid=$(id -g)
docker compose -f docker/docker-compose.yml --env-file .env up
在我的docker-compose.yml中,我有以下设置:
services:
php:
build: .
container_name: ${COMPOSE_PROJECT_NAME}-php
user: ${uid:-www-data}:${gid:-www-data}
volumes:
- ../:/var/www/html
您要求容器使用它无法识别的用户。您应该首先创建用户:
FROM php:8.1-fpm-alpine
ARG UID
ARG GID
RUN addgroup -S ${GID} && adduser -S ${UID} -G ${GID}
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN apk add --no-cache zip mariadb-client npm &&
docker-php-ext-install mysqli pdo pdo_mysql
docker-compose.yml:
services:
php:
build:
context: .
args:
- UID=${uid:-www-data}
- GID=${gid:-www-data}
container_name: ${COMPOSE_PROJECT_NAME}-php
user: ${uid:-www-data}:${gid:-www-data}
volumes:
- ../:/var/www/html
然后你可以运行:
export uid=$(id -un)
export gid=$(id -gn)
docker compose -f docker/docker-compose.yml --env-file .env up