Postgresql Dockerfile运行语句不支持';他似乎没有执行
我的Dockerfile看起来像这样Postgresql Dockerfile运行语句不支持';他似乎没有执行,postgresql,docker,Postgresql,Docker,我的Dockerfile看起来像这样 FROM postgres:12.2 RUN apt-get install -y postgresql-12-cron \ && echo "shared_preload_libraries = 'pg_cron'" >> \ /var/lib/postgresql/data/postgresql.conf postgresql-12-cron
FROM postgres:12.2
RUN apt-get install -y postgresql-12-cron \
&& echo "shared_preload_libraries = 'pg_cron'" >> \
/var/lib/postgresql/data/postgresql.conf
postgresql-12-cron包已经安装,尽管它抱怨debconf,无法找到对话框。。。当我执行到创建的容器中时,我可以看到包就在那里
但是,回显行不会出现在配置文件的末尾。我认为apt-get可能返回一些非零的退出代码,这将导致&&无法继续执行下一个语句。我在下面添加了这一行:
RUN echo "shared_preload_libraries = 'pg_cron'" >> /var/lib/postgresql/data/postgresql.conf
这会在构建过程中产生输出,看起来像:
Step 7/7 : RUN echo "shared_preload_libraries = 'pg_cron'" >> /var/lib/postgresql/data/postgresql.conf
但是,在启动并执行到容器中之后,配置文件中仍然没有添加任何行
我模糊地意识到了其他发生这种情况的情况,这不是语法错误或类似的情况,而是编写Dockerfile的人对其工作原理的误解。但我在谷歌上空手而归。我错过了什么
注意:这是Dockerfile的一个简化版本,我尝试在更多的行中回显,而不是我在示例中显示的行(它们都没有出现)
更新:我添加了以下行-
&& tail -n 10 /var/lib/postgresql/data/postgresql.conf
它产生以下输出:
shared_preload_libraries = 'pg_cron'
cron.database_name = 'kardashev'
上面应该有8行(配置文件相当大)。但输出中没有任何内容。此时,文件是空的,我创建的文件在容器实际运行之前就被吹走了。啊。我仍然不知道这意味着什么,尽管我记得几年前的一些事情。在执行查询的第一部分时:
docker run --rm postgres:12.2 apt-get install -y postgresql-12-cron
容器返回
E: Unable to locate package postgresql-12-cron
由于apt-get末尾的&,它需要在回音之前成功,如果apt-get失败,他将不会执行后面的操作
您应该修复程序包名称,然后重试
编辑:
该包存在,但您需要首先更新您的回购协议。
您的dockerfile应该如下所示:
FROM postgres:12.2
RUN apt-get update \
&& apt-get install -y postgresql-12-cron \
&& echo "shared_preload_libraries = 'pg_cron'" >> \
/var/lib/postgresql/data/postgresql.conf
声明
该声明使得下面的DockerfileRUN
语句无法修改该目录树中的任何文件
对于这样的配置文件,典型的路径是在主机上复制配置文件,然后在启动时将其注入容器中;比如说
docker run -d -p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
-v $PWD/postgresql.conf:/var/lib/postgresql/data/postgresql.conf \
postgres:12.2
(考虑到您都需要安装额外的软件包,还需要修改配置文件,您既需要这样做,也需要构建一个自定义映像。)我在顶部附近有一个更新语句。它将在命令运行时更新。我甚至在输出中看到
解包postgresql-12-cron(1.2.0-1.pgdg100+1)
。请提供完整的dockerfile,谢谢。我现在明白问题所在了。我不确定我是否喜欢为了让这一切顺利进行而必须跳出的圈圈。
docker run -d -p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
-v $PWD/postgresql.conf:/var/lib/postgresql/data/postgresql.conf \
postgres:12.2