簡體   English   中英

無法運行指定自定義用戶的主管

[英]Cannot run supervisor specifying custom user

我正在構建一個 Laravel 映像,該映像與具有 id 1000的用戶backend一起運行。 該用戶應該允許我防止出現以下錯誤:

在 append 模式下無法打開文件:無法打開 stream:權限被拒絕

問題是當我運行主管時出現此錯誤:

IOError:[Errno 13] 權限被拒絕:'/var/log/supervisord.log'

這是我的 Dockerfile:

FROM php:8.1.10-fpm-buster

WORKDIR /var/www

RUN docker-php-ext-install bcmath pdo_mysql

RUN apt-get update
RUN apt-get install -y git zip unzip netcat

# Supervisor
RUN apt-get install -y supervisor

# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Configurations
COPY docker/php/config/supervisor.conf /etc/supervisord.conf
COPY docker/php/config/php.ini /usr/local/etc/php/conf.d/app.ini

# Log file
RUN mkdir /var/log/php
RUN touch /var/log/php/errors.log && chmod 777 /var/log/php/errors.log

# Deploy
COPY /docker/php/scripts/start.sh /start.sh
RUN chmod +x /start.sh

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

# Copy existing application directory contents
COPY . /var/www

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

USER backend

EXPOSE 9000

ENTRYPOINT /start.sh

這是我的 docker-compose 文件:

version: '3.9'

services:

  php:
    container_name: ${APP_NAME}_app
    #user: ${CURRENT_UID}
    restart: always
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    volumes:
      - ./src:/var/www
    env_file: .env

這是入口點腳本:

#!/bin/bash

# Run composer install
composer install

# Generate key and clear cache
php artisan key:generate
php artisan config:clear
php artisan config:cache

# Wait db connection
until nc -z ${DB_HOST} ${DB_PORT}; do sleep 1; echo "Wait database ..."; done

# Execute migrations
php artisan migrate --seed

/usr/bin/supervisord -c /etc/supervisord.conf

最后但同樣重要的是,supervisor.conf:

[supervisord]
nodaemon=true
loglevel = info
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid

[group:laravel-worker]
priority=999
programs=laravel-app,laravel-schedule,laravel-notification,laravel-queue

[program:laravel-app]
priority=5
autostart=true
autorestart=true
stderr_logfile_maxbytes=0
stdout_logfile_maxbytes=0
command=/usr/local/sbin/php-fpm -R
stderr_logfile=/var/log/php/php-error.log
stdout_logfile=/var/log/php/php-access.log

[program:laravel-schedule]
numprocs=1
autostart=true
autorestart=true
redirect_stderr=true
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan schedule:run
stdout_logfile=/var/log/php/schedule.log

[program:laravel-notification]
numprocs=1
autostart=true
autorestart=true
redirect_stderr=true
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan notification:worker
stdout_logfile=/var/log/php/notification.log

[program:laravel-queue]
numprocs=5
autostart=true
autorestart=true
redirect_stderr=true
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/var/log/php/worker.log
command=php /var/www/artisan queue:work sqs --sleep=3 --tries=3

有什么辦法可以解決權限問題嗎?

以我的 supervisord.conf 為例。 我總是添加user=root行。 並且從未出現權限錯誤。

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true

此問題是因為在 Docker 文件中使用USER backend ,您需要配置主管以在 Docker 文件中使用相同用戶user=backend

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM