无法使用初始架构

时间:2018-02-05 19:59:22

标签: docker

我想在docker postgres中设置一些初始表。

我看https://stackoverflow.com/a/34753186/72437,认为这是直截了当的。

搬运工-compose.yml

version: '2'
services:
  postgres:
    build:
      context: ./postgres
      dockerfile: Dockerfile
    restart: always
    ports:
      - "5432:5432"

postgres的/ postgres.sql

CREATE TABLE my_table (
    client_id character varying(36) NOT NULL,
    value character varying(255)
);

postgres的/ Dockerfile

FROM postgres:latest
ENV POSTGRES_DB my_db
ADD postgres.sql /docker-entrypoint-initdb.d/

然后,我执行

  1. docker-compose build
  2. docker-compose up
  3. 我尝试通过

    检查我的数据库
    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表。

    我可以知道我错过了什么吗?

1 个答案:

答案 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

这将清理您现有的容器和本地卷。