Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 容器是数据库服务器。如何提问';s Dockerfile是否在容器启动后完成其构造?_Postgresql_Docker - Fatal编程技术网

Postgresql 容器是数据库服务器。如何提问';s Dockerfile是否在容器启动后完成其构造?

Postgresql 容器是数据库服务器。如何提问';s Dockerfile是否在容器启动后完成其构造?,postgresql,docker,Postgresql,Docker,我正在使用postgis/postgisDocker映像为我的应用程序设置数据库服务器 数据库服务器必须先创建一个表空间,然后创建一个数据库 然后,每当另一个应用程序从另一个容器启动时,它将运行一个Liquibase脚本,该脚本将在需要时更新数据库模式(创建表、索引…) 在终端上,为了准备数据库容器,我运行以下命令: #运行裸体Postgis容器 sudo docker run--名称ecoemploi postgis -e POSTGRES_PASSWORD=POSTGRES -d-v/dat

我正在使用
postgis/postgis
Docker映像为我的应用程序设置数据库服务器

  • 数据库服务器必须先创建一个表空间,然后创建一个数据库
  • 然后,每当另一个应用程序从另一个容器启动时,它将运行一个
    Liquibase
    脚本,该脚本将在需要时更新数据库模式(创建表、索引…)
  • 在终端上,为了准备数据库容器,我运行以下命令:

    #运行裸体Postgis容器
    sudo docker run--名称ecoemploi postgis
    -e POSTGRES_PASSWORD=POSTGRES
    -d-v/data/comptes france:/data/comptes france postgis/postgis
    #发送“bash-level”命令为表空间创建目录
    sudo docker exec-it ecoemploi postgis
    bin/sh-c'mkdir/tablespace&&chown postgres:postgres/tablespace'
    
    然后,为了完成步骤1,我必须运行SQL语句以
    PostGIS
    的角度创建表空间,并通过
    create database
    创建数据库

    我在容器的
    psql
    下手动连接自己:

    sudo docker exec-it ecoemploi postgis bin/sh
    -c'exec psql-h“$POSTGRES\u PORT\u 5432\u TCP\u ADDR”
    -p“$POSTGRES_PORT_5432_TCP_PORT”-U POSTGRES'
    
    我运行以下命令:

    创建表空间数据位置'/TABLESPACE';
    创建数据库表空间数据;
    出口
    
    但是我希望从一个
    Dockerfile
    创建一个容器,完成所有需要的工作。困难在于必须分两部分进行:

  • 容器启动前的一个。(创建目录,授予它们用户:组)
  • 第一次启动后的一个步骤是:声明表空间并创建基。如果我很了解我拍摄的基本图像,那么应该在运行entrypoint
    docker entrypoint.sh
    后进行

  • 完成所有这些步骤后,编写
    Dockerfile
    创建容器的好方法是什么?

    要运行容器,Dockerfile必须是功能齐全的。 您必须在bash文件中输入查询,并且在最后一行,您必须使用此bash脚本输入入口点“基于官方图像”,因此它应该能够使用
    /docker ENTRYPOINT initdb.d
    机制。第一次启动数据库容器时,将运行放入该目录中的任何文件。将PostGIS扩展安装到默认数据库中

    这意味着您可以将构建时设置直接放入Dockerfile,并将启动时脚本复制到该目录中

    来自postgis/postgis:12-3.0
    运行mkdir/tablespace&&chown postgres:postgres/tablespace
    复制createdb.sql/docker-entrypoint-initdb.d/20-createdb.sql
    #从基本图像使用默认入口点/CMD
    

    对于您描述的特定设置,这可能不是必需的。每个数据库运行在一个独立的文件系统空间中,并以一个空的数据目录开始,因此不需要创建一个备用数据目录;Docker的风格是,如果需要独立存储,只需运行多个数据库。同样,base
    postgres
    图像将在第一次启动时为您创建一个数据库(由
    postgres\u DB
    环境变量命名)。

    请给出问题的具体答案和示例