在 php:7-fpm 镜像中添加主管

mpi*_*iot 4 docker dockerfile

我使用 php:7-fpm 图像,我想安装并使用 Supervisor,在后台运行一些 PHP 脚本(rabbitmq 工作人员)。

\n\n

我可以轻松安装 Supervisor、创建 conf 文件并将其添加到映像中。但是,我不知道如何在容器启动时启动它。如果我用 Supervisor 替换 que CMD,则 php-fpm 不会启动。在 docker 库中的 php-fpm dockerfile 的末尾,他们使用CMD ["php-fpm"],我尝试将其添加到我的主管 conf 中,并使用CMD /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf,它启动主管和一个简单的 php 服务。但这不起作用。

\n\n

我们可以使用很多CMD吗?或者有什么简单的解决办法吗?

\n\n

非常感谢你的帮助。

\n\n

我的 Dockerfile:

\n\n
FROM php:7.1.5-fpm\n\n############################\n# Install PHP requirements #\n############################\n\n# Install wget, git and libraries needed by php extensions\nRUN apt-get update && \\\n    apt-get install -y \\\n    zlib1g-dev \\\n    wget \\\n    git \\\n    supervisor\n\n# Remove lists\nRUN rm -rf /var/lib/apt/lists/*\n\n#\xc2\xa0Compile ICU (required by intl php extension)\nRUN curl -sS -o /tmp/icu.tar.gz -L http://download.icu-project.org/files/icu4c/58.2/icu4c-58_2-src.tgz && \\\n    tar -zxf /tmp/icu.tar.gz -C /tmp && \\\n    cd /tmp/icu/source && \\\n    ./configure --prefix=/usr/local && \\\n    make && \\\n    make install\n\n# Configure, install and enable php extensions\nRUN docker-php-ext-configure intl --with-icu-dir=/usr/local\nRUN docker-php-ext-install intl pdo pdo_mysql zip bcmath\nRUN docker-php-ext-enable opcache\n\n# Install Composer\nRUN php -r "readfile(\'https://getcomposer.org/installer\');" | php -- --install-dir=/usr/local/bin --filename=composer && chmod +x /usr/local/bin/composer\n\n# Copy the php.ini file\nCOPY php.ini /usr/local/etc/php/\n\n##################\n# Define workdir #\n##################\nWORKDIR /var/www/html/current\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 docker-compose.yml:

\n\n
php:\n    container_name: php\n    build: ./docker/php\n    volumes:\n        - .:/var/www/html/current:rw\n        - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro\n        - ./docker/php/supervisor/blast_consumer.conf:/etc/supervisor/conf.d/blast_consumer.conf:ro\n    networks:\n        - default\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的blast_consumer:

\n\n
[program:php-fpm]\ncommand=/usr/sbin/php-fpm\nnumprocs=1\nautostart=true\nautorestart=true\nstderr_logfile=/var/log/php-fpm_consumer.err.log\nstdout_logfile=/var/log/php-fpm_consumer.out.log\npriority=100\n\n[program:blast_consumer]\ncommand=/var/www/html/current/bin/console rabbitmq:consumer blast\nnumprocs=1\nautostart=true\nautorestart=true\nstderr_logfile=/var/log/blast_consumer.err.log\nstdout_logfile=/var/log/blast_consumer.out.log\npriority=200\n
Run Code Online (Sandbox Code Playgroud)\n

Rob*_*ert 6

我看到 php-fpm 位于/usr/local/sbin/php-fpm. 因此,请相应地更新您的主管command

[program:php-fpm]
command=/usr/local/sbin/php-fpm
numprocs=1
autostart=true
autorestart=true
stderr_logfile=/var/log/php-fpm_consumer.err.log
stdout_logfile=/var/log/php-fpm_consumer.out.log
priority=100

[program:blast_consumer]
command=/var/www/html/current/bin/console rabbitmq:consumer blast
numprocs=1
autostart=true
autorestart=true
stderr_logfile=/var/log/blast_consumer.err.log
stdout_logfile=/var/log/blast_consumer.out.log
priority=200
Run Code Online (Sandbox Code Playgroud)

要获得主管的更多信息,请在容器内执行以下操作:

supervisorctl status
supervisorctl tail php-fpm
Run Code Online (Sandbox Code Playgroud)