【问题标题】:Google Cloud Build failed for Laravel artisan, involving database connectionLaravel artisan 的 Google Cloud Build 失败,涉及数据库连接
【发布时间】:2018-11-21 04:21:59
【问题描述】:

我正在尝试将源打包为图像并由 Google Cloud Build 构建

这是我的 docker 文件:

FROM php
RUN cd ~ && curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN cd ~ && php composer-setup.php --install-dir=/usr/local/bin --filename=composer
ADD ./mysource /app
WORKDIR /app
RUN cd /app && composer update --ignore-platform-reqs && composer install --ignore-platform-reqs
RUN cd /app && composer require laravel/horizon && php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"

结果构建失败并且日志显示: (最新日志在顶部)

Step #1: 
ERROR: build step 1 "gcr.io/cloud-builders/docker" failed: exit status 1
Finished Step #1
Step #1: The command '/bin/sh -c cd /app && composer update --ignore-platform-reqs && composer install --ignore-platform-reqs' returned a non-zero code: 1
Step #1: Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1
Step #1: SQLSTATE[HY000] [2002] Connection refused 
Step #1: In PDOConnection.php line 46:
Step #1: SQLSTATE[HY000] [2002] Connection refused 
Step #1: In PDOConnection.php line 50:
Step #1: chema.tables where table_schema = forge and table_name = explorers) 
Step #1: SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_s 
Step #1: 
Step #1: In Connection.php line 664:
Step #1: 
Step #1: > @php artisan package:discover
Step #1: > Illuminate\Foundation\ComposerScripts::postAutoloadDump
Step #1: Generating optimized autoload files

我正在寻找类似services in bitbucket pipeline 的东西,您可以在构建过程中使用它。我还提到了here 提出的问题,但这些回复并没有解决我的问题。

欣赏任何想法

【问题讨论】:

  • 你的 laravel-project/.env 设置怎么样?使用正确的数据库连接参数检查和更新这些设置可能是值得的。 laradock/.env 文件中是否配置了用户名和密码?
  • 是的,.env 配置良好,我很确定如果云构建,这与“步骤”之间的联系有关。因为我也尝试通过最简单的 mysql cli 连接到上一步,到 localhost/127.0.0.1/0.0.0.0/ 都失败了
  • 关于我的云构建 yaml 的更多详细信息 Step1:gcr.io/cloud-builders/docker arg: run --name=mysql -p 3306:3306 --env MYSQL_USER=forge --env MYSQL_PASSWORD= forge --env MYSQL_DATABASE=forge --env MYSQL_ROOT_PASSWORD=secret --env MYSQL_ROOT_HOST=% -d circleci/mysql Step2:gcr.io/cloud-builders/docker arg:build -t <..... dockerfile> 在 RUN mysql -u root --password=root -h 127.0.0.1 --port=3306 --database=forge 等 docker 文件中尝试连接
  • 连接参数是否正确?您需要手动调整它们,以促进构建成功。

标签: build google-cloud-platform google-cloud-build


【解决方案1】:

根据https://github.com/GoogleCloudPlatform/community/issues/351#issuecomment-370056462

很遗憾,在构建阶段,CloudSQL 连接不可用。

【讨论】:

    【解决方案2】:

    只想发布我的解决方案的更新。 结果我添加了一个 MySQL 容器,创建特定网络并在所有其他步骤(容器)中指定名称(容器) --network &lt;network_name&gt;,因此以下步骤中的容器可以通过 mysql 的名称直接连接容器。

    为了安全起见,我添加了一个容器作为缓冲区,以确保 mysql 容器有足够的时间来构建和构建。

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['network','create','gcb_network']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['run','--name=mysql','-p','3306:3306','--network','gcb_network','--env','MYSQL_USER=<user>','--env','MYSQL_PASSWORD=<pwd>','--env','MYSQL_ROOT_PASSWORD=<user>','--env','MYSQL_DATABASE=<dbname>','-d','mysql/mysql-server:5.7']
    - name: 'ubuntu'
      args: ['sleep','10']
      id: 'MYSQLDeferrer'
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/<projectname>/<img_name>:latest','--network','gcb_network','-f','<path_to_docker_file>','.']
      waitFor:
        - 'MYSQLDeferrer'
      env:
      - 'DB_HOST='
      - 'DB_USERNAME='
      - 'DB_PASSWORD='
    images: ['gcr.io/<projectname>/<img_name>']
    

    根据您的设置,您可能/可能不需要环境。

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2021-03-27
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2017-10-03
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多