Docker-Compose Postgresql导入转储

我有一个关于docker和Postgres的问题。 每次docker启动时,我都要设置一个新的postgres数据库,并且要导入给定的转储。

我的问题是喜欢,但答案是不够的: Docker postgres不运行docker-entrypoint-initdb.d中的init文件

多克尔 – 撰写:

postgres: environment: - POSTGRES_USER=**** - POSTGRES_PASSWORD=**** - POSTGRES_DB=**** build: context: . dockerfile: dockerfile-postgres 

我的Dockerfile :(我已经用.sh结尾的脚本试过了)

 FROM postgres ADD dump.sql /docker-entrypoint-initdb.d/ 

根据https://hub.docker.com/_/postgres/必须使用dump.sql来导入数据库。

使用docker启动应用程序只会提供:

 postgres_1 | LOG: invalid record length at 0/1708600 postgres_1 | LOG: redo is not required postgres_1 | LOG: MultiXact member wraparound protections are now enabled postgres_1 | LOG: database system is ready to accept connections postgres_1 | LOG: autovacuum launcher started 

除此之外,我testing了如果我的数据库已被导入,我的数据库中没有表。 我在做什么错误(文件在目标系统上被读取和执行)? 用psql导入没有问题,所以我的转储是正确的。

我希望你能帮助我,我想提前感谢你。

好吧,我find了诀窍,我必须执行“docker-compose rm”才能执行该文件夹中的脚本和sql文件。 一旦构build和不删除init文件夹被忽略。

更新我再次遇到这个问题,这次删除图像docker创build解决了这个问题。

这是因为最有可能发生

initdb脚本docker-entryfile.sh然后负责按字母顺序运行/docker-entrypoint-initdb.d/*文件,只有在创build卷时才会首次运行。

你可以在这里看到一些细节。

解决scheme(与我一起工作)这是我的docker-compose文件的代码片段

  postgres_service: build: context : docker-postgres dockerfile: Dockerfile-base image: 'datahub/postgres:development' user: postgres ports: - "5432:5432" env_file: - credentials/postgres/development.env volumes: - /Users/yogesh.yadav/DockerData/datahub/postgresql/data:/var/lib/postgresql/data restart: unless-stopped networks: - datahubnetwork 

脚步 –

1) docker-compose -f docker-compose-filename.yml down

要么

docker-compose -f docker-compose-filename.yml stop postgres_service

2)删除附带postgres_service docker服务的卷/卷(/Users/yogesh.yadav/DockerData/datahub/postgresql/data)。 您可以手动或通过docker-compose rmdocker volume rm来执行此操作。 请在删除之前确定附加到该postgres服务的卷。 更多信息在这里

3)Docker通过构build映像并运行它们来使用非常好的cachingpipe理。 如果你没有修改你的DockerfileDockerfile会从caching中运行已经build好的镜像并运行它。 所以我build议删除postgres_service的图像。

列出图像

 docker images -a 

输出 –

 REPOSITORY TAG IMAGE ID CREATED SIZE datahub/postgres development e7707e670ad4 35 minutes ago 265 MB 

删除该图像(如果需要,使用-f)

 docker rmi IMAGE_ID_HERE 

4)重新启动您的服务

 docker-compose -f docker-compose-filename.yml up --build postgres_service 

这次你可以看到你的docker-entrypoint.shdump.sql会执行。