Контейнер PostgreSQL не использует переменные среды при запуске сценарием запуска - PullRequest
1 голос
/ 10 апреля 2019

Я хочу, чтобы мои док-контейнеры запускались при загрузке Raspberry PI, поэтому я создал службу, которая запускается при запуске после этого ответа .

Это созданный сервис:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/ubuntu/asset-tracking/laradock
ExecStart=/usr/local/bin/docker-compose up -d nginx beacon-clocking mongo postgres
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Кажется, что все работает гладко, когда я перезагружаю систему, но когда я получаю доступ к странице входа в систему, я получаю эту ошибку:

SQLSTATE[08006] [7] FATAL: password authentication failed for user "boilerplate_user" (SQL: select * from "settings") 

Теперь ,ilerplate_user - это одна из переменных среды, используемая для входа в базу данных postgres, но похоже, что контейнер о них не знает. Запуск docker ps показывает, что контейнер работает вместе с другими.

Я попытался войти в контейнер postgres и войти в postgres, используя переменные окружения, но он говорит, что role boilerplate_user does not exist

Странная вещь, однако, в том, что если я сделаю docker-compose up -d postgres с контейнером, уже запущенным службой, он не скажет, что он обновлен, но похоже, что он работает, как будто он не работал уже на первом месте. После второго запуска я могу войти в базу данных, используя boilerplate_user, и страница входа в мое приложение работает как чудо.

Я также попытался отключить службу и запустить скрипт вручную после перезагрузки. Когда я делаю это таким образом, я могу войти, используя boilerplate_user.

Это мой docker-compose.yml для контейнера postgres:

### PostgreSQL ###########################################
    postgres:
      restart: always
      build: ./postgres
      volumes:
        - ${DATA_PATH_HOST}/postgres:/var/lib/postgresql/data
        - ${POSTGRES_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
      ports:
        - "${POSTGRES_PORT}:5432"
      environment:
        - POSTGRES_DB=${POSTGRES_DB}
        - POSTGRES_USER=${POSTGRES_USER}
        - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      networks:
        - backend

Я ожидаю, что контейнер postgres будет использовать переменные env без необходимости вручную вводить ssh в систему после каждой перезагрузки, чтобы перезапустить контейнер (или запустить его навсегда).

...