从 docker 中初始化 Laravel 护照

Init Laravel passport from within docker

我正在 docker 调整我们的开发环境。该应用程序包括一个 laravel 公开 REST API 的应用程序。通过 laravel 护照进行身份验证。

由于这仅供开发人员使用,因此我正在 运行 安装作曲家依赖项、设置应用程序加密密钥、迁移数据库和设置通行证密钥。除护照密钥外,一切都已正确初始化。无论我如何尝试解决问题,我都会遇到以下错误:

fpm_1 | In CryptKey.php line 45:

fpm_1 |

fpm_1 | Key path "file:///var/www/html/storage/oauth-public.key" does not exist or

fpm_1 | is not readable

这是我的 docker-compose 文件的相关部分。

version: '3'
  services:
  fpm:
      build: ./api/docker/fpm
      restart: unless-stopped
      volumes:
        - ./api:/var/www/html
        - /etc/passwd:/etc/passwd
      user: "${UID}:${GID}"

我的 fpm docker文件 (./api/docker/fpm/Dockerfile)

FROM php:7.2.6-fpm
COPY ./init-app.sh /usr/local/bin/
COPY ./install-composer.sh /usr/local/bin/
RUN apt-get update && apt-get install -y --no-install-recommends libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev libpng-dev \
libzip-dev \
libzip4 \
git \
zip \
wget \
&& apt-get autoremove \
&& apt-get clean \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& docker-php-ext-configure zip --with-libzip=/usr/include/ \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql \
&& chmod +x /usr/local/bin/init-app.sh \
&& chmod +x /usr/local/bin/install-composer.sh \
&& /usr/local/bin/install-composer.sh \
&& rm /usr/local/bin/install-composer.sh \
&& wget https://raw.githubusercontent.com/vishnubob/wait-for-it/8ed92e8cab83cfed76ff012ed4a36cef74b28096/wait-for-it.sh \
&& chmod +x wait-for-it.sh \
&& mv wait-for-it.sh /usr/local/bin/
ENTRYPOINT [ "/usr/local/bin/init-app.sh" ]
CMD ["php-fpm"]

install-composer.sh 在构建时将 composer 安装到容器中。

init-app.sh:

#!/bin/sh
set -e
# Install composer dependencies
composer install

# Copy env file
cp .env.example .env

# Wait for DB to be up
/usr/local/bin/wait-for-it.sh db:3306 -t 0 --strict -- php artisan key:generate && php artisan migrate:refresh --seed
php artisan passport:install

# Run upstream entrypoint

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "" ]; then
    set -- php-fpm "$@"
fi

exec "$@"

当我在 .zshrc 中导出 $UID 和 $GID 时,我的用户已正确映射到 fpm 容器内。注释掉 init-app.sh 中的 passport:install 行,以便让容器正确启动,我可以通过 运行ning docker exec -it php artisan passport:install 就好了。但是让容器处理它失败了。

事实证明,我的一个数据库播种器以某种方式要求密钥存在。在我调查的同时,我通过交换说明(播种和护照密钥安装)解决了问题