Не удалось запустить службу kong, написанную в docker-compose - PullRequest
0 голосов
/ 27 мая 2018

У меня есть следующий docker-compose.yml файл для запуска kong с postgresql .У меня также были миграции, которые я сейчас удалил.Хотите знать, почему он вызывает проблемы с подключением с postgresql.

  • Контейнер postgresql запущен и работает.
  • Проблема в kong

Вот мой docker-compose.yml:

version: '3.2'
networks:
  kong-net:

services:

  kong-database:
    image: postgres:9.5
    container_name: kong-database
    networks:
      - kong-net
    ports:
      - 5435:5435
    environment:
      - POSTGRES_DB=kong
      - POSTGRES_USER=kong
      - POSTGRES_PASSWORD=password

  kong:
    image: kong:latest
    restart: always
    networks:
      - kong-net
    depends_on:
      - kong-database
    ports:
      - 8000:8000
      - 8443:8443
      - 8009:8009
      - 7947:7947
      - 7947:7947/udp
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_PASSWORD=password
      - KONG_ADMIN_LISTEN=0.0.0.0:8009

Я меняю порты для kong, так как какая-то другая служба уже работает в порту 8001

Вот журналы ошибок от docker-compose logs

LOGS:

Attaching to kong_kong_1, kong-database
kong-database    | The files belonging to this database system will be owned by user "postgres".
kong-database    | This user must also own the server process.
kong-database    | 
kong-database    | The database cluster will be initialized with locale "en_US.utf8".
kong-database    | The default database encoding has accordingly been set to "UTF8".
kong-database    | The default text search configuration will be set to "english".
kong-database    | 
kong-database    | Data page checksums are disabled.
kong-database    | 
kong-database    | fixing permissions on existing directory /var/lib/postgresql/data ... ok
kong-database    | creating subdirectories ... ok
kong-database    | selecting default max_connections ... 100
kong-database    | selecting default shared_buffers ... 128MB
kong-database    | selecting dynamic shared memory implementation ... posix
kong-database    | creating configuration files ... ok
kong-database    | creating template1 database in /var/lib/postgresql/data/base/1 ... ok
kong-database    | initializing pg_authid ... ok
kong-database    | initializing dependencies ... ok
kong-database    | creating system views ... ok
kong-database    | loading system objects' descriptions ... ok
kong-database    | creating collations ... ok
kong-database    | creating conversions ... ok
kong-database    | creating dictionaries ... ok
kong-database    | setting privileges on built-in objects ... ok
kong-database    | creating information schema ... ok
kong-database    | loading PL/pgSQL server-side language ... ok
kong-database    | vacuuming database template1 ... ok
kong-database    | copying template1 to template0 ... ok
kong-database    | copying template1 to postgres ... ok
kong_1           | prefix directory /usr/local/kong not found, trying to create it
kong_1           | nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:169: [postgres error] could not retrieve server_version: connection refused
kong_1           | stack traceback:
kong_1           |  [C]: in function 'error'
kong_1           |  /usr/local/share/lua/5.1/kong/init.lua:169: in function 'init'
kong_1           |  init_by_lua:3: in main chunk
kong_1           | nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:169: [postgres error] could not retrieve server_version: connection refused
kong_1           | stack traceback:
kong_1           |  [C]: in function 'error'
kong_1           |  /usr/local/share/lua/5.1/kong/init.lua:169: in function 'init'
kong_1           |  init_by_lua:3: in main chunk

1 Ответ

0 голосов
/ 27 мая 2018

Ваша первая проблема заключается в том, что контейнер kong запускается до того, как контейнер kong-database завершил процесс инициализации.Это источник ошибок «отказано в соединении».Вы можете проверить это, сначала запустив базу данных:

docker-compose up kong-database

, а затем подождав, пока не увидите:

PostgreSQL init process complete; ready for start up.

Затем в другом окне запустите контейнер kong:

docker-compose up kong

И вы увидите новую ошибку:

kong_1           | nginx: [warn] [lua] log.lua:63: log(): postgres
  database 'kong' is missing migration: (response-transformer)
  2016-05-04-160000_resp_trans_schema_changes
kong_1           | nginx: [error] init_by_lua error:
  /usr/local/share/lua/5.1/kong/init.lua:172: [postgres error] the
  current database schema does not match this version of Kong.
  Please run `kong migrations up` to update/initialize the database
  schema. Be aware that Kong migrations should only run from a
  single node, and that nodes running migrations concurrently will
  conflict with each other and might corrupt your database schema!

Это означает, что kong успешно подключается к postgres, но похоже, что вам нужно запустить какую-то инициализацию схемы базы данныхдо того, как это сработает.

Типичное решение для такого рода зависимостей запуска - реализовать цикл ожидания при запуске клиентов вашей базы данных, который зацикливается до тех пор, пока база данных не станет доступной.Что-то вроде:

while ! psql -h kong-database -U kong -c 'select 1'; do
  sleep 1
done
...