用初始模式构buildpostgres docker容器
我正在寻找代表已经存在的公司数据库的dockerfiles。 同样,我想创build一个docker文件,开始恢复一个psql转储。
我有我的psql_dump.sql
中.
目录。
FROM postgres ADD . /init_data run "createdb" "--template=template0" "my_database" run "psql" "-d" "my_database" --command="create role my_admin superuser" run "psql" "my_database" "<" "init_data/psql_dump.sql"
我认为这样做足够好。 我想避免使用.sh
脚本的解决scheme。 像这个解决scheme 。
我使用template0,因为psql文档说您需要创build原始数据库中创build的相同用户,并且您需要在还原之前使用template0创build数据库。
但是,它给了我一个错误:
createdb: could not connect to database template1: could not connect to server: No such file or directory Is the server running locally and accepting
我也使用docker组成的整体应用程序,如果解决这个问题在docker组成更好,我会很乐意使用基本的psql图像,并使用docker撰写来做到这一点。
根据官方PostreSQL Docker镜像的使用指南 ,您只需要:
Dockerfile
FROM postgres ENV POSTGRES_DB my_database COPY psql_dump.sql /docker-entrypoint-initdb.d/
POSTGRES_DB
环境variables将指示容器在第一次运行时创build一个my_database
模式。
在容器的/docker-entrypoint-initdb.d/
中find的任何.sql
文件都将被执行。
如果要执行.sh
脚本,也可以在/docker-entrypoint-initdb.d/
目录中提供它们。
正如在评论中所说,@Thomasleveil答案是伟大的,如果您的架构娱乐快速简单。 但在我的情况下,它是缓慢的,我想使用docker卷,所以这就是我所做的
- 首先在@Thomasleveil中使用docker image来创build一个包含所有scehma初始化的postgres的容器
Dockerfile:
FROM postgres WORKDIR /docker-entrypoint-initdb.d ADD psql_dump.sql /docker-entrypoint-initdb.d EXPOSE 5432
-
然后运行它并创build新的本地目录,其中包含从“psql_dump.sql”文件填充后的postgres数据:
docker cp mypg:/var/lib/postgresql/data ./postgres-data
-
将数据复制到临时数据文件夹,然后启动一个新的postgres docker-compose容器,其容量位于新的临时数据文件夹中:
startPostgres.sh:
rm -r ./temp-postgres-data/data mkdir -p ./temp-postgres-data/data cp -r ./postgres-data/data ./temp-postgres-data/ docker-compose -p mini-postgres-project up
和docker-compose.yml文件是:
version: '3' services: postgres: container_name: mini-postgres image: postgres:9.5 ports: - "5432:5432" volumes: - ./temp-postgres-data/data:/var/lib/postgresql/data
现在,您可以在新机器上运行步骤#1和#2,或者如果您的psql_dump.sql更改。 每次你想要一个新的干净(但已经初始化)的数据库,你只能运行第3步的startPostgres.sh。 它仍然使用docker卷。
- 在Docker-compose上的127.0.0.1:6379(Errno :: ECONNREFUSED)连接到Redis的Sidekiq错误
- 如果我更改一个文件,是否需要在Docker容器中重buildpython库?
- 使用docker-compose构build容器,但稍后使用-it选项运行/ etc / bash?
- Docker与Drone和Gitlab组成,Gitlab错误“包含的redirectURI无效”。
- Docker-Compose问题与容器名称
- Docker Compose + Rails:迁移的最佳实践?
- 为什么在运行docker容器之后,mysql数据所有权会更改为systemd-journal-remote
- 运行使用docker撰写节点容器时出错
- Docker用户将容器中的用户命名空间映射到主机