首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres Docker在docker内部版本上导入SQL转储

Postgres Docker在docker内部版本上导入SQL转储
EN

Stack Overflow用户
提问于 2021-10-27 13:22:33
回答 1查看 109关注 0票数 0

我试图摆脱Docker-In-Docker,因此我用新的Postgres镜像替换。对于一个用例,我们使用一个预先填充的Postgres图像。旧的工作流程是构建镜像,将其拉入管道,并使用Docker- in -Docker填充数据,然后再次将其重新上传到镜像注册表。

新的方法是使用docker创建Postgres镜像,并且我已经将.sql转储复制到/docker-entrypoint-initdb.d/。但这会在启动后填充图像,我希望在容器注册表中有一个预先填充的图像,因为填充需要2分钟。

这是我的Dockerfile:

代码语言:javascript
复制
FROM postgres:11.12

LABEL maintainer="Hello Stackoverflow"

ARG POSTGRES_VERSION="11.12"
ARG TZ="Europe/Berlin"

ENV TZ ${TZ}
ENV LANG de_DE.UTF-8
ENV LANGUAGE de_DE.UTF-8
ENV LC_ALL de_DE.UTF-8
ENV POSTGRES_PASSWORD 'blabla'
ENV POSTGRES_HOST_AUTH_METHOD trust

RUN set -x && \
    localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8


COPY test-data/. /docker-entrypoint-initdb.d/

CMD ["postgres"]

test-data文件夹中是一个执行填充的外壳脚本

代码语言:javascript
复制
#!/bin/sh
cd /docker-entrypoint-initdb.d
echo "read one.sql"
psql -v ON_ERROR_STOP=1 -U postgres  < sql/one.sql
echo "read two.sql"
...
...
...

因此,我们的想法是使用模式预先填充Postgres docker镜像,并将其上传到注册表。

EN

回答 1

Stack Overflow用户

发布于 2021-10-27 14:38:31

理论上,你可以在docker构建过程中运行postgres引擎,并执行你需要的任何东西,这里没有完整的工作示例,即postgres无法启动,因为没有配置文件。

如果你在这上面花更多的时间,我打赌它会起作用的。

在您的行COPY test-data/. /docker-entrypoint-initdb.d/CMD ["postgres"]之间插入以下内容

代码语言:javascript
复制
RUN adduser --disabled-password --gecos "" dbuser
RUN apt-get update
RUN apt-get install -y sudo
RUN echo "dbuser ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/dbuser && chmod 0440 /etc/sudoers.d/dbuser

USER dbuser:dbuser

RUN sudo chown -R dbuser:dbuser /docker-entrypoint-initdb.d
RUN sudo chown -R dbuser:dbuser /var/lib/postgresql/

RUN postgres

WORKDIR /docker-entrypoint-initdb.d

RUN psql -v ON_ERROR_STOP=1 -U postgres  < sql/one.sql

目前在RUN postgres上失败了-无法在德国上找到配置postgres,而且我不是postgres专家,也不会说德语,所以我不能立即解决。

这部分还安装了sudo并将新的dbuser添加到sudo组中,因为postgress不想从根目录开始,所以postgres从dbuser运行。

希望本文能帮助您朝着正确的方向前进:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69739501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档