簡體   English   中英

Docker無法在Travis CI中與Postgresql建立連接

[英]Docker cannot establish connection with postgresql in Travis CI

我正在嘗試將Travis CI集成到我的Rails應用程序中。 在我的本地計算機(ubuntu,Windows)上一切正常,但是在travis主機上存在連接錯誤。 所以,這是我的配置。

.travis.yml

sudo: required

language: ruby

services:
  - docker

env:
  DOCKER_COMPOSE_VERSION: 1.13.0

before_install:
  - sudo rm /usr/local/bin/docker-compose
  - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
  - chmod +x docker-compose
  - sudo mv docker-compose /usr/local/bin
  - sudo apt-get update
  - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-engine
  - docker-compose build
  - docker-compose -f docker-compose.commands.yml run --rm website rails db:create db:migrate db:test:prepare

script:
 - docker-compose -f docker-compose.commands.yml run --rm -e RAILS_ENV=test website rspec

database.yml

development: &default
adapter: postgresql
database: my_app_development
username: postgres
host: postgres
port: 5432

docker-compose.commands.yml

version: '3'

services:
  postgres:
    image: 'postgres:9.6.2'
    ports:
      - "5432"

  website:
    depends_on:
      - 'postgres'
    build: .
    ports:
      - '3000'
  volumes:
    - '.:/my_app'
    - 'bundle_data:/bundle'

 volumes:
  bundle_data:

但是travis日志在運行遷移時會輸出此信息

狀態:為Postgres下載的較新圖像:9.6.2

創建myapp_postgres_1 ...

創建myapp_postgres_1

無法連接到服務器:連接被拒絕服務器是否在主機“ postgres”(172.18.0.2)上運行並接受端口5432上的TCP / IP連接? 無法為{“ adapter” =>“ postgresql”,“ encoding” =>“ unicode”,“ database” =>“ my_app_development”,“ pool” => 5,“ username” =>“ postgres”創建數據庫, “ host” =>“ postgres”,“ port” => 5432}導軌中斷! PG :: ConnectionBad:無法連接到服務器:連接被拒絕服務器是否在主機“ postgres”(172.18.0.2)上運行並接受端口5432上的TCP / IP連接?

感謝@ johnharris85和@jbielick,我找到了這個解決方案:

website:
    depends_on:
      - 'postgres'
    build: .
    ports:
      - '3000'
    volumes:
      - '.:/my_app'
      - 'bundle_data:/bundle'
    entrypoint: ./wait-for-postgres.sh postgres 5432

  postgres:
    image: 'postgres:9.6.2'
    ports:
      - '5432'

wait-for-postgres.sh

#!/bin/sh

postgres_host=$1
postgres_port=$2
shift 2
cmd="$@"

# wait for the postgres docker to be running
while ! pg_isready -h $postgres_host -p $postgres_port -q -U postgres; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

>&2 echo "Postgres is up - executing command"

# run the command
exec $cmd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM