由启动脚本运行时,PostgreSQL容器不使用环境变量

时间:2019-04-10 07:25:06

标签: postgresql docker ubuntu docker-compose arm

我希望我的docker容器在Raspberry PI启动时运行,因此我创建了一个服务,该服务在this answer之后启动时执行。

这是已创建的服务:

# /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") 

现在,boilerplate_user是用于登录到postgres数据库的环境变量之一,但是看起来容器对此一无所知。 运行docker ps显示该容器正在与其他容器一起运行。

我尝试进入postgres容器并使用环境变量登录到postgres,但是它显示role boilerplate_user does not exist

但是,很奇怪的是,如果我对已经由服务运行的容器进行docker-compose up -d postgres操作,它不会说它是最新的,但是看起来它像以前那样运行了。首先已经运行。第二次运行后,我可以使用boilerplate_user登录数据库,并且应用程序上的登录页面就像超级按钮一样。

我还尝试过在重新启动后禁用该服务并手动运行脚本。这样操作后,便可以使用boilerplate_user登录。

这是我的docker-compose.yml for 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进入系统以重新启动容器(或永久启动它)。

0 个答案:

没有答案