使用docker compose创建表和方案Postgres

时间:2019-05-13 21:45:47

标签: postgresql docker-compose

我正在尝试使用docker-compose文件创建一个包含架构和表的Postgres数据库。

我已经阅读了有关此主题的一些文章,并尝试了建议的解决方案: 使用应将卷执行的.sql文件复制到/docker-entrypoint-initdb.d/中。

我的docker- compose是:

  postgres_db:
       image: postgres:latest
       hostname: postgres-db
       container_name: postgres
       expose:
         - "5432"
       ports:
         - "5432:5432"
       networks:
         - default
       environment:
         - "POSTGRES_PASSWORD=password"
         - "POSTGRES_USER=postgres"
         - "POSTGRES_DB=postgres"
       volumes:
         - ./scripts/postgres:/docker-entrypoint-initdb.d/

/ scripts / postgres中的文件为:

1-schema.sql

CREATE SCHEMA myschema;

2-table.sql

CREATE TABLE myschema.mytable(id integer PRIMARY KEY, purchase_date date, unit integer, description varchar(300));

我收到以下错误:

postgres       | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/1-schema.sql
postgres       | psql:/docker-entrypoint-initdb.d/1-schema.sql:0: could not read from input file: Is a directory
postgres exited with code 1

我也尝试将卷定义为:

       volumes:
         - ./scripts/postgres/1-schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
         - ./scripts/postgres/2-table.sql:/docker-entrypoint-initdb.d/2-table.sql

但仍然出现相同的错误:(

关于它为什么失败以及可能的解决方法的任何建议?

编辑: @Mihai,似乎没有一个名为1-schema.sql的文件夹。在建议的命令的输出下方:

$ ls -lart ./scripts/postgres
total 16
-rw-r--r--@ 1 user  staff   26 13 may 22:21 1-schema.sql
-rw-r--r--@ 1 user  staff  152 13 may 22:21 2-table.sql
drwxr-xr-x  4 user  staff  128 13 may 22:43 .
drwxr-xr-x  9 user  staff  288 13 may 22:50 ..

$ cat ./scripts/postgres/1-schema.sql
CREATE SCHEMA myschema;
$ cat ./scripts/postgres/2-table.sql
CREATE TABLE myschema.mytable(id integer PRIMARY KEY, purchase_date date, unit integer, description varchar(300));

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以通过创建实际文件夹来重现您的问题:

mkdir ./scripts/postgres/0-schema.sql
docker-compose up

然后我确切地得到了您的错误:

postgres       | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/0-schema.sql
postgres       | psql:/docker-entrypoint-initdb.d/0-schema.sql:0: could not read from input file: Is a directory

仔细检查您的本地设置,因为您的“ scripts / postgres”文件夹中可能有一个名为1-schema.sql的文件夹。 通过在您的项目文件夹中运行进行检查:

ls -lart ./scripts/postgres