我想在docker postgres中设置一些初始表。
我看https://stackoverflow.com/a/34753186/72437,认为这是直截了当的。
version: '2'
services:
postgres:
build:
context: ./postgres
dockerfile: Dockerfile
restart: always
ports:
- "5432:5432"
CREATE TABLE my_table (
client_id character varying(36) NOT NULL,
value character varying(255)
);
FROM postgres:latest
ENV POSTGRES_DB my_db
ADD postgres.sql /docker-entrypoint-initdb.d/
然后,我执行
我尝试通过
检查我的数据库docker ps
docker exec -it bb54abc9be16 bash
root@bb54abc9be16:/# psql -h 127.0.0.1 -U postgres
psql (10.1)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
| | | | | postgres=CTc/postgres
(3 rows)
似乎my_db
DB并且未创建my_table
表。
我可以知道我错过了什么吗?
答案 0 :(得分:3)
运行docker-compose down
命令清理现有容器和卷。
我已经按照你的流程了。它对我有用。
$ docker-compose down
$ docker-compose build
$ docker-compose up
第一次使用docker-compose up
时,它会为/var/lib/postgresql/data
创建一个容器和本地volume。
docker-compose images
Container Repository Tag Image Id Size
----------------------------------------------------------------
test_postgres_1 test_postgres latest 4514d60c85fb 274 MB
然后在你的情况下每次都以相同的容器和体积开始。
因此,如果您在未提供init脚本时首先使用docker-compose up
,则更改Dockerfile以添加init脚本。除非您删除现有的容器,否则它将无效。
因为,在本地卷PG_VERSION文件中创建了。并在数据库初始化之前检查。
这就是为什么
$ docker-compose down
这将清理您现有的容器和本地卷。