Docker-Compose Postgresql import dump
我有一个关于Docker和Postgres的问题。每次Docker启动并想导入一个给定的转储文件时,我都会建立一个新的Postgres数据库。
我的问题是,但答案对我来说还不够:docker postgres不在docker entrypoint initdb.d中运行init文件
码头工人组成:
1 2 3 4 5 6 7 8 | postgres: environment: - POSTGRES_USER=**** - POSTGRES_PASSWORD=**** - POSTGRES_DB=**** build: context: . dockerfile: dockerfile-postgres |
我的dockerfile:(我已经用一个以.sh结尾的脚本尝试过了)
1 2 | FROM postgres ADD dump.sql /docker-entrypoint-initdb.d/ |
根据https://hub.docker.com//postgres/dump.sql,必须使用SQL导入数据库。
使用Docker启动应用程序只会提供:
1 2 3 4 5 | 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 |
此外,我还测试了我的数据库是否已经导入,我的数据库中没有表。我做错了什么(文件在目标系统上是可读的和可执行的)?用psql导入没有问题,所以我的转储是正确的。
我希望你能帮助我,我想提前感谢你。
好吧,我找到了窍门,我必须执行"docker compose rm"才能执行这个文件夹中的脚本和SQL文件。一旦建立并没有删除init文件夹将被忽略。
更新我再次遇到这个问题,这次移除Docker创建的图像解决了这个问题。
这里的答案在一定程度上解决了我的问题,但是让
如果有的话,
要检查是否存在任何语法脚本问题(或其他问题),您可能会发现查看Docker日志很有用:
1 | $ docker ps -ALL |
注意:
查找刚刚创建的图像,并查找容器ID,该ID应为12个字符的哈希:
1 | $ docker logs baf32ff7ec03 |
请记住,您仍然需要遵循这里的其他答案-这是RM以前构建的图像和删除您的数据文件夹(如果需要备份它)。
这是因为很可能
initdb脚本
你可以在这里看到一些细节。
解决方案(与我一起工作)这是我的Docker撰写文件中的一个片段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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)江户十一〔2〕
或
2)删除Postgres ou Service Docker服务附带的卷/卷(/users/yogesh.yadav/docker data/datahub/postgresql/data)。您可以手动或通过
3)Docker通过构建和运行图像来使用非常好的缓存管理。如果您没有修改您的
列出图像
1 | docker images -a |
输出-
1 2 | REPOSITORY TAG IMAGE ID CREATED SIZE datahub/postgres development e7707e670ad4 35 minutes ago 265 MB |
删除该图像(如果需要,请使用-f)
1 | docker rmi IMAGE_ID_HERE |
4)重新启动服务
1 | docker-compose -f docker-compose-filename.yml up --build postgres_service |
这一次,您可以看到您的