Почему контейнер postgres игнорирует /docker-entrypoint-initdb.d/* в Gitlab CI - PullRequest
2 голосов
/ 08 мая 2019

Gitlab CI продолжает игнорировать sql-файлы в /docker-entrypoint-initdb.d/* в этого проекта .

здесь docker-compose.yml:

version: '3.6'

services:

  testdb:
    image: postgres:11
    container_name: lbsn-testdb
    restart: always
    ports:
      - "65432:5432"
    volumes:
      - ./testdb/init:/docker-entrypoint-initdb.d

здесь .gitlab-ci.yml:

stages:
  - deploy

deploy:
  stage: deploy
  image: debian:stable-slim
  script:
    - bash ./deploy.sh

Сценарий развертывания в основном использует rsync для развертывания содержимого хранилища на сервере через SSH:

rsync -rav --chmod=Du+rwx,Dgo-rwx,u+rw,go-rw -e "ssh -l gitlab-ci" --exclude=".git" --delete ./ "gitlab-ci@$DEPLOY_SERVER:test/"

и затем ssh на сервер, чтобы остановить и перезапустить контейнер:

ssh "gitlab-ci@$DEPLOY_SERVER" "cd test && docker-compose down && docker-compose up --build --detach"

Все это идет хорошо , но когда контейнер запускается, он должен запускать все файлы, которые находятся в /docker-entrypoint-initdb.d/*, как мы можем видеть здесь .

Но вместо этого, когда я делаю docker logs -f lbsn-testdb на сервере, я вижу, что

/usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

и я понятия не имею, почему это происходит. При локальном запуске этого контейнера или даже когда я ssh на этот сервер, клонирую репозиторий и вручную поднимаю контейнеры, все идет хорошо и анализирует sql-файлы. Только не тогда, когда это делает Gitlab CI.

Есть идеи, почему это так?

1 Ответ

1 голос
/ 09 мая 2019

Это оказалось проще, чем я ожидал, и не имело ничего общего с Gitlab CI, но с правами доступа к файлам.

Я передал --chmod=Du+rwx,Dgo-rwx,u+rw,go-rw в rsync, что выглядело действительно безопасно, потому что только пользователь может делать вещи,Признаюсь, что я, вероятно, скопировал его откуда-то в Интернете.Но затем файлы монтируются в контейнер Docker, и там у них также есть эти разрешения:

-rw------- 1 1005 1004 314 May  8 15:48 100-create-database.sql

На хосте, который мой пользователь gitlab-ci владеет этими файлами, они, очевидно, также принадлежат некоторому пользователюс идентификатором 1005 в контейнере, и никакие разрешения не предоставляются другим пользователям, кроме этого.

Внутри контейнера пользователь, который делает что-то, хотя и postgres, но не может читать эти файлы.Вместо того, чтобы жаловаться на это, он просто игнорирует их.Это может быть чем-то, что может создать проблему о…

Теперь, когда я передаю --chmod=D755,F644, это выглядит так:

-rw-r--r--  1 1005 1004  314 May  8 15:48 100-create-database.sql

и в журналах докера написано

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/100-create-database.sql

Во-первых, слишком легко придумать: - /

...