【问题标题】:running script in Dockerfile makes Container Exit with Code 0, running the same script with docker exec works fine在 Dockerfile 中运行脚本使容器退出代码 0,使用 docker exec 运行相同的脚本工作正常
【发布时间】:2021-08-06 19:26:39
【问题描述】:

所以我正在构建一个 Laravel 应用程序,我在 docker-compose.yml 中定义了一个 mysql 数据库和一个 nginx 网络服务器来与我的 php 应用程序一起使用。

这是 PHP 应用程序的 Dockerfile:

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    unzip \
    git \
    libonig-dev \
    libzip-dev \
    curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl gd mysqli pdo

WORKDIR /var/www

COPY composer.lock composer.json ./

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=comp>

# Copy existing application directory contents
COPY . ./

RUN chown -R www-data:www-data /var/www

#laravel + packages install
RUN composer install

RUN chmod -R guo+w storage

# Expose port 9000 and start php-fpm server
EXPOSE 9000

CMD ["php-fpm"]

ENTRYPOINT ["/var/www/migrate.sh"]

shell 脚本是这样的:

#!/bin/sh

nohup php artisan migrate:fresh --force

golb_app_1 exited with code 0
app_1        | Dropped all tables successfully.
app_1        | Migration table created successfully.
app_1        | Migrating: 2014_10_12_000000_create_users_table
app_1        | Migrated:  2014_10_12_000000_create_users_table (24.82ms)
app_1        | Migrating: 2014_10_12_100000_create_password_resets_table
app_1        | Migrated:  2014_10_12_100000_create_password_resets_table (17.29ms)
app_1        | Migrating: 2019_08_19_000000_create_failed_jobs_table
app_1        | Migrated:  2019_08_19_000000_create_failed_jobs_table (22.36ms)
app_1        | Migrating: 2021_06_09_080445_create_posts_table
app_1        | Migrated:  2021_06_09_080445_create_posts_table (47.77ms)
app_1        | Migrating: 2021_06_09_120221_update_users_table
app_1        | Migrated:  2021_06_09_120221_update_users_table (21.67ms)
golb_app_1 exited with code 0

如果我运行我的 docker-compose up,我得到的输出是什么。 然后 Container 将重新启动并一次又一次地这样做。

如果我注释掉脚本并使用 docker exec 运行它,它将运行并且数据库工作正常。

【问题讨论】:

    标签: laravel docker


    【解决方案1】:

    “exited with code 0”表示运行成功。由于它是入口点,因此容器会停止。

    迁移后需要运行serve命令:

    php artisan serve --host=0.0.0.0 --port=$APP_PORT
    

    (见https://stackoverflow.com/a/48854030/1123052

    【讨论】:

    • #!/bin/sh nohup php artisan migrate:fresh --seed & 给我:golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1 退出代码 0 golb_app_1在我的控制台中以代码 0 退出
    • 它甚至不是迁移命令,如果我只是用echo "lol" & 运行脚本,我仍然只能得到退出代码 0
    • 入口点脚本中的最后一个命令应该是运行php服务器的命令
    • 编辑了答案,基于stackoverflow.com/a/48854030/1123052
    • 等等,我做错了什么:我注意到我没有使用 php artisan serve,我使用 php-fpm 我在粘贴代码时剪切了代码或其他东西。现在我的网关又坏了……
    【解决方案2】:
    #!/bin/sh
    sleep 15
    
    php artisan migrate:fresh --force &
    
    php-fpm
    

    现在调用 php-fpm 的调用脚本 (CMD) 删除入口点

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多