我正在构建一个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命令给我错误。
答案 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脚本 目录以在启动服务之前进行进一步的初始化。