当前位置: 首页 > 面试题库 >

如何在容器内创建postgres扩展?

扈沛
2023-03-14
问题内容

我必须安装hstore到docker postgres上
这是我在Shell中执行我的普通命令的需求

psql -d template1 -c 'create extension hstore';

如果我删除容器中的那行,它可以工作,但是我必须hstore自己执行安装,并且我必须告诉项目中的每个人都这样做,这不是一个好习惯

这是我的 yml file

  postgres:
    build:
      context: .
      dockerfile: dockerfiles/devdb.dockerfile
    environment:
      POSTGRES_USER: uih
      POSTGRES_PASSWORD: uIhbod!
      POSTGRES_DB: uih_portal
    ports:
        - "5433:5432"

这是我的码头工人文件 devdb.dockerfile

FROM postgres:9.5

RUN mkdir -p /var/lib/postgresql-static/data
ENV PGDATA /var/lib/postgresql-static/data

# psql -d template1 -c 'create extension hstore;'
CMD ["psql", "-d", "template1", "-c", "'create extension hstore;'"]

RUN echo "hstore extension installed"

构建后,我无法运行它

$ docker-compose up postgres
Recreating uihportal_postgres_1
Attaching to uihportal_postgres_1
postgres_1       | psql: could not connect to server: No such file or directory
postgres_1       |      Is the server running locally and accepting
postgres_1       |      connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
uihportal_postgres_1 exited with code 2

题:

如何hstore从dockerfile 安装?
我想制作图像并将其重新用于团队的整个项目


问题答案:

之所以失败是因为Postgres在构建期间没有在容器中运行,而是仅在CMD容器运行时才开始。

Docker映像的入口点脚本支持运行设置步骤- /docker-entrypoint-initdb.d容器启动时将执行目录中的任何.sql或.sh文件。

因此,您可以通过将扩展程序设置放入SQL脚本中并将该脚本复制到init目录的映像中来完成此操作:

> cat hstore.sql
create extension hstore
> cat Dockerfile
FROM postgres:9.5
COPY hstore.sql /docker-entrypoint-initdb.d

构建该映像时,SQL脚本将在正确的位置执行,因此,每当从该映像运行容器时,它将安装扩展。



 类似资料:
  • 我想在启动Postgres Docker映像后创建一个数据库。

  • 这是我的东西? 如何阅读SequelizeMeta的内容? 谢啦

  • 在job.yaml下面用于创建作业。未创建初始化容器。 [root@app]#kubectl版本客户端版本:version.info{Major:“1”,Minor:“15”,GitVersion:“v1.15.5”,GitCommit:“”,GitTreeState:“Clean”,BuildDate:“2019-10-15T19:16:51Z”,GoVersion:“Go1.12.10”,编译

  • 我正在尝试创建MPEG-DASH内容。我找到了可以组合的代码。mp4parser中的m4s文件。请有人引导我去创造这样的。m4s文件和。mpd文件。

  • 问题内容: 所以我最近发现了这个很棒的工具,它说 Docker是一个开源项目,可以从任何应用程序轻松创建轻便,可移植,自给自足的容器。开发人员在笔记本电脑上构建和测试的容器可以在生产环境中大规模运行在VM,裸机,OpenStack集群,公共云等上。 假设我有一个运行Nginx的docker映像,一个网站连接到外部数据库。如何在生产中缩放容器? 问题答案: 首先,感谢那些多年来对这个答案的支持。 请

  • 4.3.1.4 创建/使用内部内容供应器 内部内容供应器禁止除内部应用以外的应用使用。 下面展示了如何实现内部内容供应器的示例代码。 要点(创建内容供应器): 定义内部签名权限。 需要内部签名权限。 将导出属性显式设置为true。 验证内部签名权限是否由内部应用定义。 验证参数的安全性,即使这是来自内部应用的请求。 由于请求应用是内部的,因此可以返回敏感信息。 导出 APK 时,请使用与请求应用相