Docker Postgres客户端和命令

时间:2019-10-22 11:04:55

标签: docker

我正在构建一个Dockerfile,在那里我拉了一个postgresq客户端。我想做的是连接到数据库并执行一些sql命令(全部在Dockerfile中定义并且没有交互)。如果我在下面执行类似的操作,则可以连接:

docker run -it --rm jbergknoff/postgresql-client postgresql://username:password@10.1.0.173:5432/db

但是我不知道如何在Dockerfile中复制它:

FROM jbergknoff/postgresql-client
RUN  postgresql://username:password@10.1.0.173:5432/db // error

RUN命令给我错误。

1 个答案:

答案 0 :(得分:1)

原因很清楚,我的意思是Postgres服务在此阶段没有运行,这是在构建期间。

  

RUN postgresql://username:password@10.1.0.173:5432/db // error

因此,这将无法正常工作。

这是此类Docker映像或自定义Docker的常见问题,因此我建议您使用offical image,这样您就不必再为自定义入口点脚本而烦恼了,只需要将SQL脚本复制到{{1} },或者可以在运行时安装到该路径。

/docker-entrypoint-initdb.d

就是这样,正式映像将处理此脚本并在Postgres服务启动并运行时运行该脚本。

如果要使其正常工作,必须在运行Postgres服务并能够处理连接的入口点放置该命令。

初始化脚本

  

如果您想对派生的图像进行其他初始化   从这一项中,在下面添加一个或多个* .sql,*。sql.gz或* .sh脚本   /docker-entrypoint-initdb.d(如有必要,创建目录)。   在入口点调用initdb之后,创建默认的postgres用户   和数据库,它将运行任何* .sql文件,运行任何可执行文件* .sh   脚本,并提供在其中找到的所有非可执行* .sh脚本   目录以在启动服务之前进行进一步的初始化。