我有一个laravel应用和一个工作正常的Postgis容器。我正在尝试使用github工作流程beta为我的项目设置配置项。我的工作流尝试访问数据库时失败。对于本地环境,我正在使用容器名称canie-db
设置数据库主机。但是在我的github工作流程中,我无法通过容器名称找到数据库主机。我在尝试运行测试时收到此错误:
Doctrine \ DBAL \ Driver \ PDOException:SQLSTATE [08006] [7]无法 将主机名“ canie-db”转换为地址:名称中的临时故障 分辨率
这是我的.github/workflows/ci.yml
name: CanieCICD
on:
push:
branches:
- master
- stage
- ci/cd-patch
pull_request:
branches:
- stage
- ci/cd-patch
jobs:
build:
runs-on: ubuntu-18.04
services:
canie-db:
image: mdillon/postgis:10
ports:
- 5432:5432
env:
POSTGRES_DB: canie-db
POSTGRES_USER: iabs_user
POSTGRES_PASSWORD: p@ssw0rd
steps:
- uses: actions/checkout@v1
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install composer dependencies
run: composer install --prefer-dist
- name: Run PHPUnit tests # CI fails here!
run: vendor/bin/phpunit --no-coverage
- name: Install npm dependencies
run: npm install
- name: Run Mix
run: npm run production
我的Laravel后端数据库配置文件config/database.php
具有'default' => env('DB_CONNECTION', 'pgsql'),
和
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'canie-db'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'canie-db'),
'username' => env('DB_USERNAME', 'iabs_user'),
'password' => env('DB_PASSWORD', 'p@ssw0rd'),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
我还尝试将docker-compose up -d canie-db
添加到我的工作流程中,但是它也不起作用
答案 0 :(得分:0)
我认为答案是在https://github.com/actions/example-services/blob/master/.github/workflows/postgres-service.yml发布的评论和示例中阐明的。
为什么它不起作用,是因为您的工作流程/步骤在VM中运行(ubuntu-18.04),并且VM不知道 canie-db
的docker容器主机名一种解决方法是使用localhost,因为端口已公开
'host' => env('DB_HOST', 'localhost'),
或者(可选),如您在示例中找到的那样,在容器中运行工作流和postgres。这样就可以知道主机 canie-db 。
container:
image: node:10.16-jessie