【问题标题】:Failed to build postgres docker container with initial schema无法使用初始架构构建 postgres docker 容器
【发布时间】:2018-02-06 05:24:16
【问题描述】:

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

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

docker-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 构建
  2. 码头工人组成

我尝试通过

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

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

【问题讨论】:

  • 你可以试试 postgres:10 吗?
  • 你的意思是FROM postgres:10 吗?
  • docker-compose version?
  • 是的。从 postgres:10
  • 我用10检查了这个。工作正常

标签: docker


【解决方案1】:

运行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

然后在您的情况下,它每次都以相同的容器和卷开始。

所以如果你在没有提供初始化脚本的情况下先使用docker-compose up,然后更改Dockerfile添加初始化脚本。除非您删除现有的 Container,否则它将无法工作。

因为,在本地卷中创建了 PG_VERSION 文件。并且在数据库初始化之前检查。

这就是为什么

$ docker-compose down

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

【讨论】:

  • 感谢您的解释。 docker-compose down 真的很有帮助。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多