【发布时间】:2017-05-15 08:40:38
【问题描述】:
我有一个 postgres:9.5.6-alpine 容器和另一个名为 web 的容器,它必须链接到它。
我想在 postgres 容器启动并执行 docker-entrypoint.sh 后在 postgres 容器中运行一个名为 create_db.sh 的脚本,以便创建数据库和用户并恢复备份。
我的docker-compose.yml(postgres 部分):
postgres:
build: ./postgres
container_name: postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
ports:
- "5432:5432"
command: sh /home/create_db.sh
create_db.sh的内容是:
#!/bin/sh
psql -d template1 -U postgres
psql --command "CREATE USER user WITH PASSWORD 'userpassword';"
psql --command "CREATE DATABASE userdb;"
psql --command "GRANT ALL PRIVILEGES ON DATABASE userdb to user;"
psql --command "\q;"
psql -U user -d userdb -f /var/lib/postgresql/backup.sql
exit
当我运行docker-compose build 然后docker-compose up 我得到这个:
Attaching to postgres, web
postgres | psql: could not connect to server: No such file or directory
postgres | Is the server running locally and accepting
postgres | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
我明白这是因为当我启动 create_db.sh 时,postgres 服务器还没有准备好,那么我该如何在容器的 docker-entrypoint.sh 之后运行它呢?
【问题讨论】:
-
我认为您应该在
docker-entrypoint.sh中添加create_db.sh文件的内容。这将解决您的问题。
标签: postgresql docker docker-compose