当前位置: 首页 > 知识库问答 >
问题:

docker-entrypoint.sh忽略/docker-entrypoint-initdb.d/my.backup

刘令
2023-03-14

我正在尝试初始化一个运行Postgres的容器,使用

FROM postgres:9.6

COPY my.backup /docker-entrypoint-initdb.d/
root@pc ~ % docker run  -p 5432:5555 -e POSTGRES_PASSWORD=postgres 

属于此数据库系统的文件将由用户“Postgres”所有。该用户还必须拥有服务器进程。

数据库集群将使用区域设置“en_us.utf8”初始化。默认的数据库编码相应地被设置为“UTF8”。默认的文本搜索配置将设置为“English”。

数据页校验和被禁用。

我已经检查了文件权限

如何确定init脚本忽略备份的原因?

共有1个答案

司马德水
2023-03-14

如果my.backup是一个shell脚本,则需要为它提供.sh扩展名。从文档中:

如果您想要在由此派生的映像中执行额外的初始化,请在/docker-entrypoint-initdb.d下添加一个或多个*.sql、*.sql.gz或*.sh脚本(如果需要,请创建目录)。在entrypoint调用initdb创建默认的postgres用户和数据库之后,它将运行任何*.sql文件,运行任何可执行的*.sh脚本,并在启动服务之前从该目录中找到的任何不可执行的*.sh脚本中获取数据,以便进行进一步的初始化。

 类似资料:
  • 以下是我的项目结构的一部分: 我有init.sql脚本,它应该创建用户、数据库和表(用户和数据库与docker-compose.yml文件中的相同) 但当我查看docker entrypoint initdb.d文件夹时,它是空的(没有init.sql文件)。我使用以下命令: docker exec最新发布的\u postgres-passport\u 1 ls-l docker入口点initdb

  • 问题内容: 操作系统 :debian 8.0.0-amd64,ubuntu-15.04,16.04 码头工人 :1.xx 程序: 我更改为添加一个私有Docker注册表,然后重新启动了docker服务,最后尝试提取一些映像。 一个输出显示一无所知DOCKER_OPTS环境变种。 题: 根据Docker文档,使用私有注册表的方式是通过中的DOCKER_OPTS进行。为什么这样做之后在这种环境下不生效

  • 问题内容: 我正在尝试构建自定义的tcserver docker映像。但是我在启动Web服务器和tomcat时遇到了一些问题。 据我了解,我应该使用ENTRYPOINT运行我想要的命令。 问题是,是否可以使用ENTRYPOINT运行多个命令? 还是应该创建一个小的bash脚本来全部启动? 基本上我想做的是: 但是我不知道这是否是一个好习惯,或者是否可行。 问题答案: 如果要在入口点运行许多命令,最

  • 问题内容: 我的脚本无法执行并抛出 。为什么这样? Dockerfile: docker-entrypoint.sh: 作品 Dockerfile: 问题答案: 该图像不包含您尝试用shebang调用的图像。您应该将其更改为脚本,或者将其删除。

  • 问题内容: 几天前才意识到Docker似乎绕过了我的iptable规则。我对Docker和iptables并不感到不可思议。最近几天尝试了很多不同的事情。还看到最近的docker版本有了很大的变化,带有特殊的DOCKER链,应该可以让我做到这一点。但是不确定我做错了什么,但是却从不做我期望做的事情。 所以我想要的很简单。我希望它的行为像预期的那样。如果我有一个ACCEPT-Rule要通过,如果没有

  • 问题内容: 通过进行更改时,如何确保在Dockerfile中指定的原始CMD仍设置为在其上运行? 这是事件的顺序,以使其更加清楚: 使用Dockerfile创建映像 之后从image运行容器以进行一些更改 在容器内进行更改并运行以创建带有新标签的新图像 运行新映像时,不再运行原始Dockerfile中的原始CMD条目 所以我问 如何在已提交的映像上再次从Dockerfile重置CMD? 问题答案: