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 rm
或docker volume rm
来执行此操作。 请在删除之前确定附加到该postgres服务的卷。 更多信息在这里
3)Docker通过构build映像并运行它们来使用非常好的cachingpipe理。 如果你没有修改你的Dockerfile
, Dockerfile
会从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.sh
和dump.sql
会执行。