-1

我想提取 docker postgres 图像并mydb在其中创建一个数据库。我可以像这样一步一步地做到这一点

  1. docker run -d -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password -d postgres:12.1

  2. docker exec -it containername /bin/bash

  3. psql -h localhost -U postgres

  4. CREATE database mydb;

我想在自述文件中添加这些步骤。运行容器本身时,是否可以在单个命令中完成所有操作?尝试了类似下面的方法但无法成功

docker run -d -p 5432:5432 --name terminals -e POSTGRES_PASSWORD=password -d postgres:12.1 psql -h localhost -U postgres; create database terminals

4

2 回答 2

0

您可以将初始化脚本挂载到容器中:

docker run -d -v /local-path/your-init.sql:/docker-entrypoint-initdb.d/your-init.sql -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password postgres:12.1

你的init.sql:

CREATE database mydb;
于 2020-10-15T19:13:46.263 回答
0

Postgres 官方 docker 镜像(如您当前使用的 postgres:12.1)附带一个docker-entrypoint.sh脚本,该脚本能够基于环境变量初始化数据库(@Zeitounator 也提到了文档)因此,为了在启动时启动 postgres 并启动数据库,您需要在运行映像时添加一个额外的环境变量 (POSTGRES_DB=mydb):

docker run -d -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password -e POSTGRES_DB=mydb -d postgres:12.1
于 2020-10-16T15:24:59.060 回答