Я хочу, чтобы мои док-контейнеры запускались при загрузке 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 в систему после каждой перезагрузки, чтобы перезапустить контейнер (или запустить его навсегда).