exec 内置 shell 命令在 Docker 初始化脚本上的 Alpine 中不起作用

问题描述 投票:0回答:1

我有这个简单的 shell 脚本来在 Docker 中启动 Laravel 应用程序:

#!/bin/sh

set -ex
# generate the key if it does not already exist
case `grep APP_KEY .env | sed -e 's/APP_KEY=\s*//'` in
    'base64:'*)
        echo "artisan key already exists...";;
    *)
        echo "generating artisan key..."
        php artisan key:generate;;
esac
# create or update database
echo "create or update database..."
php artisan migrate --force
echo "starting server"
exec "/usr/local/bin/php artisan serve --host=0.0.0.0"

php artisan migrate
行工作正常,因此 php 在 PATH 中,但
exec "/usr/local/bin/php artisan serve --host=0.0.0.0"
行(w/或w/o /usr/local/bin 路径)说:

/var/www/docker_init.sh: exec: line 16: /usr/local/bin/php artisan serve --host=0.0.0.0: not found

docker 文件包含:

FROM php:8.2-fpm-alpine

# Arguments defined in docker-compose.yml
ARG user=fcms
ARG uid=1000

# install helper for installing php extensions
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# install php extensions
RUN chmod +x /usr/local/bin/install-php-extensions && \
   install-php-extensions @composer pdo_mysql exif pcntl gd imagick

# Set working directory
WORKDIR /var/www

# Create system user to run Composer and Artisan Commands
RUN addgroup -S $user && \
    adduser -G $user -G www-data -G root -u $uid -h /home/$user -S $user && \
    mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user
# Copy the fcms code
COPY --chown=$user:www-data . .
RUN \
    # move the right init file (which execs php artisan serve at the end)
    mv docker/apache/init.artisan.sh ./docker_init.sh && \
    # clean unused folders and blocking files
    rm -rf docker vendor composer.lock .git && \
    # Install everything
    composer install --no-dev

# Set user
USER $user

HEALTHCHECK --interval=5m --timeout=3s --start-period=10s \
  CMD curl -f http://localhost/ || exit 1

CMD ["/var/www/docker_init.sh"]

其中 docker_init.sh 是上面的脚本。 最后一件事,跑步:

docker run -it fcms.artisan php artisan serve --host=0.0.0.0

工作完美。

我不明白这里的“exec”有什么问题......

php laravel docker sh alpine-linux
1个回答
0
投票

正如 @DavidMaze 评论所提供的,问题是我在 exec 命令周围添加了双引号。 除去它们,它就开始像魅力一样发挥作用

© www.soinside.com 2019 - 2024. All rights reserved.