【docker系列】使用docker compose启动postgresql

举报
kwan的解忧杂货铺 发表于 2024/10/15 18:38:26 2024/10/15
【摘要】 要在启动 PostgreSQL 容器时执行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目录。这个目录下的 SQL 文件会在容器启动时被自动执行。下面是如何修改 Docker Compose 配置文件,以便在启动时执行初始化 SQL 脚本:创建初始化 SQL 脚本文件:在项目中创建一个 SQL 文件,例如 init.sql,并将需要执行的...

要在启动 PostgreSQL 容器时执行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目录。这个目录下的 SQL 文件会在容器启动时被自动执行。
在这里插入图片描述

下面是如何修改 Docker Compose 配置文件,以便在启动时执行初始化 SQL 脚本:

  1. 创建初始化 SQL 脚本文件
    在项目中创建一个 SQL 文件,例如 init.sql,并将需要执行的 SQL 命令写入其中。确保这个 SQL 文件包含需要的数据库结构和数据。

    -- init.sql
    CREATE TABLE IF NOT EXISTS users (
        id SERIAL PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        password VARCHAR(100) NOT NULL
    );
    
    INSERT INTO users (username, password) VALUES ('admin', 'admin123');
    
  2. 更新 Docker Compose 配置
    docker-compose.yml 文件中,添加 volumes 配置,将包含初始化 SQL 脚本的目录映射到 PostgreSQL 容器的 docker-entrypoint-initdb.d 目录。

    version: "3.8"
    
    services:
      postgresql:
        container_name: postgresql
        image: 172.18.x.xxx:5000/postgres:15-alpine
        restart: always
        environment:
          POSTGRES_PASSWORD: dify
          POSTGRES_DB: dify
          PGDATA: /var/lib/postgresql/data/pgdata
        volumes:
          - ./volumes/db/test/data:/var/lib/postgresql/data
          - ./init-scripts:/docker-entrypoint-initdb.d
        ports:
          - "5432:5432"
        networks:
          - ssrf_proxy_network
    
    networks:
      ssrf_proxy_network:
        driver: bridge
        internal: true
    

    在上面的配置中,我添加了一个 volumes 条目 - ./init-scripts:/docker-entrypoint-initdb.d,这将把本地目录 ./init-scripts 映射到 PostgreSQL 容器的 docker-entrypoint-initdb.d 目录下。
    在这里插入图片描述

  3. 启动 PostgreSQL 容器
    运行以下命令启动的 PostgreSQL 容器,并让它执行初始化 SQL 脚本:

    docker-compose up -d
    

    PostgreSQL 容器会启动,并自动执行 docker-entrypoint-initdb.d 目录下的 SQL 脚本文件。这样,数据库就会被初始化,表和数据会被创建。

确保 SQL 脚本文件的命名符合 PostgreSQL 的执行顺序要求(通常按字母顺序执行)。这样,就可以在每次启动 PostgreSQL 容器时自动初始化数据库。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。