【问题标题】:Docker php-fpm container exit with code 0 after running Symfony console commands运行 Symfony 控制台命令后,Docker php-fpm 容器退出代码 0
【发布时间】:2020-01-02 06:56:43
【问题描述】:

我正在学习 docker,并试图为 Symfony 项目设置环境。在我将迁移和固定装置创建命令添加到 entrypoint.sh 之前,它运行良好。现在 php 容器将在运行 entrypoint.sh 中的所有命令后以代码 0 退出。有人可以帮我解决这个问题吗?

这是我的设置:

docker-compose.yaml

version: "3.7"

services:
    nginx:
        image: nginx:alpine
        ports:
            - ${NGINX_HOST_PORT}:80
        volumes:
            - ./public:/var/www/symfony/public
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
        depends_on:
            - php

    php:
        build:
            context: .
            dockerfile: docker/php/Dockerfile
        volumes:
            - symfony:/var/www/symfony:delegated
        depends_on:
            - mysql
            - redis
            - composer
        environment:
            REDIS_HOST: redis
            REDIS_PORT: 6379

    redis:
        image: redis:alpine

    composer:
        image: composer:latest
        command: install
        volumes:
            - symfony:/app

    mysql:
        image: mysql:latest
        command: --default-authentication-plugin=mysql_native_password
        ports:
            - ${MYSQL_HOST_PORT}:3306
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}

volumes:
    symfony:
    #        driver: local
    #        driver_opts:
    #            type: none
    #            o: bind
    #            device: ${PWD}:${PWD}
        driver: local
        driver_opts:
            type: nfs
            o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3
            device: ${PWD}:${PWD}

用于 php 容器的 Dockerfile:

FROM php:7.3-fpm-alpine

ENV APP_DEPENDENCIES \
    curl \
    vim \
    git

ENV PHP_EXTENSIONS \
    pdo_mysql

ENV PECL_EXTENSIONS \
    xdebug \
    redis

RUN apk add --no-cache ${APP_DEPENDENCIES} ${PHPIZE_DEPS} && \
    docker-php-ext-install ${PHP_EXTENSIONS} && \
    pecl install ${PECL_EXTENSIONS} && \
    docker-php-ext-enable ${PECL_EXTENSIONS}

COPY ./ /var/www/symfony
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh

CMD ["/usr/local/bin/entrypoint.sh"]

入口点.sh:

#!/bin/sh

APP_PATH="/var/www/symfony"

echo "applying db migrations"
${APP_PATH}/bin/console doctrine:migrations:migrate first
${APP_PATH}/bin/console doctrine:migrations:migrate
${APP_PATH}/bin/console doctrine:fixtures:load

【问题讨论】:

  • 你期待什么?
  • 在我添加入口点脚本之前,PHP 容器会继续运行。我对 Docker 很陌生,所以任何信息都会有所帮助。谢谢!
  • @LinPy 我想我的问题是,为什么在我添加 CMD 之前它一直在运行,为什么在我添加它们之后它停止运行?
  • 在添加入口点脚本之前您的文件如何?你能把它发布到问题上吗?
  • 我希望您必须在脚本末尾执行php /my/script.php 之类的操作

标签: php docker


【解决方案1】:

首先,容器在执行入口点脚本时会死掉,因为没有进程让容器在入口点中运行。应该总是有一个进程会继续运行,这样容器就不会死掉。

第二件事,你没有在入口点启动php-fpm,因此你的容器不会在容器中启动 PHP。

更新您的入口点。

#!/bin/sh
APP_PATH="/var/www/symfony"
echo "all params $@"
echo "applying db migrations"
${APP_PATH}/bin/console doctrine:migrations:migrate first
${APP_PATH}/bin/console doctrine:migrations:migrate
${APP_PATH}/bin/console doctrine:fixtures:load
echo "starting php-fpm"
exec $@

更新 Dockerfile 中的 CMD

CMD ["/usr/local/bin/entrypoint.sh","php-fpm","-F"]

【讨论】:

  • @yife 有帮助吗?
猜你喜欢
  • 2018-12-13
  • 2019-12-27
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2019-06-18
  • 2022-01-20
  • 2019-09-26
  • 2020-01-23
相关资源
最近更新 更多