【docker系列】使用docker compose启动postgresql
要在启动 PostgreSQL 容器时执行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d
目录。这个目录下的 SQL 文件会在容器启动时被自动执行。
下面是如何修改 Docker Compose 配置文件,以便在启动时执行初始化 SQL 脚本:
-
创建初始化 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');
-
更新 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
目录下。
-
启动 PostgreSQL 容器:
运行以下命令启动的 PostgreSQL 容器,并让它执行初始化 SQL 脚本:docker-compose up -d
PostgreSQL 容器会启动,并自动执行
docker-entrypoint-initdb.d
目录下的 SQL 脚本文件。这样,数据库就会被初始化,表和数据会被创建。
确保 SQL 脚本文件的命名符合 PostgreSQL 的执行顺序要求(通常按字母顺序执行)。这样,就可以在每次启动 PostgreSQL 容器时自动初始化数据库。
- 点赞
- 收藏
- 关注作者
评论(0)