首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头入口点循环运行

码头入口点循环运行
EN

Stack Overflow用户
提问于 2022-08-01 13:36:26
回答 1查看 344关注 0票数 0

我是新来的Docker,并试图调整一个设置从Symfony Docker到另一个应用程序使用不同的Dockerfile。

我使用一个端口入口点来运行数据库迁移,当然,这要求数据库处于打开状态。

我的Dockerfile调用了,但是在某种程度上进入了一个循环,重复运行它--入口点代码。

这是/docker/php上的Dockerfile:

代码语言:javascript
复制
FROM php:8.1-apache AS symfony_php

RUN a2enmod rewrite

RUN apt-get update \
 && apt-get install -y libpq-dev libzip-dev git libxml2-dev nano wget --no-install-recommends \
 && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
 && docker-php-ext-install pdo pdo_pgsql pgsql zip \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN wget https://getcomposer.org/download/2.3.5/composer.phar \
  && mv composer.phar /usr/bin/composer && chmod +x /usr/bin/composer


COPY docker/php/apache.conf /etc/apache2/sites-enabled/000-default.conf
COPY docker/php/php.ini /usr/local/etc/php/conf.d/app.ini

COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENV SYMFONY_PHPUNIT_VERSION=9

COPY . /var/www

WORKDIR /var/www

RUN mkdir -p var/cache var/log
RUN chmod -R 777 ./var/cache && chmod -R 777 ./var/log

RUN composer install --prefer-dist --no-progress --no-interaction

ENTRYPOINT ["docker-entrypoint"]

入口点也位于/docker/php。

代码语言:javascript
复制
set -e

if grep -q DATABASE_URL= .env; then
    echo "Waiting for database to be ready..."
    ATTEMPTS_LEFT_TO_REACH_DATABASE=60
    until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do
        if [ $? -eq 255 ]; then
            # If the Doctrine command exits with 255, an unrecoverable error occurred
            ATTEMPTS_LEFT_TO_REACH_DATABASE=0
            break
        fi
        sleep 1
        ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1))
        echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left."
    done

    if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then
        echo "The database is not up or not reachable:"
        echo "$DATABASE_ERROR"
        exit 1
    else
        echo "The database is now ready and reachable"
    fi

    if ls -A migrations/*.php >/dev/null 2>&1; then
        php bin/console doctrine:migrations:migrate --no-interaction
    fi
fi

exec docker-php-entrypoint "$@"

由此产生的循环:

EN

回答 1

Stack Overflow用户

发布于 2022-08-05 05:41:19

将这一点添加到我的切入点解决了这个问题:

/usr/sbin/apache2ctl -D前台

入口点似乎中断了服务器进程,并将上面的片段放置在服务器上。

编辑:

更好的是:

更改Dockerfile如下:

代码语言:javascript
复制
ENTRYPOINT ["docker-entrypoint"]

CMD ["apachectl", "-D", "FOREGROUND"]

并在entrypoint.sh上保持原稿:

代码语言:javascript
复制
 exec docker-php-entrypoint "$@"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73194562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档