Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL docker映像中创建表_Postgresql_Dockerfile - Fatal编程技术网

在PostgreSQL docker映像中创建表

在PostgreSQL docker映像中创建表,postgresql,dockerfile,Postgresql,Dockerfile,我是新来的码头工人。我已经扩展了PostgreSQL映像,并且能够在运行映像时创建新的DB实例。我需要从将执行.sql文件的shell脚本在该DB中创建表。运行PostgreSQL映像时,是否显示服务器未启动?如何在docker容器中启动PostgreSQL server之后才能执行脚本 Dockerfile: FROM postgres:9.3 ENV POSTGRES_USER docker ENV POSTGRES_PASSWORD docker ENV POSTGRES_DB docke

我是新来的码头工人。我已经扩展了PostgreSQL映像,并且能够在运行映像时创建新的DB实例。我需要从将执行.sql文件的shell脚本在该DB中创建表。运行PostgreSQL映像时,是否显示服务器未启动?如何在docker容器中启动PostgreSQL server之后才能执行脚本

Dockerfile:

FROM postgres:9.3
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker 
RUN apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3
ADD initialize.sh /home/MM0312/docker-entrypoint-initdb.d/initialize.sh
CMD ["/home/MM0312/docker-entrypoint-initdb.d/initialize.sh"]
初始化.sh

#!/bin/bash
set -e
set -x

echo "******PostgreSQL initialisation******"
gosu docker psql -h localhost -p 5432 -U docker -d $docker -a -f createDatabase.sql
createDatabase.sql文件

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

在的docker-entrypoint.sh脚本中写入:

psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" )

        echo
        for f in /docker-entrypoint-initdb.d/*; do
            case "$f" in
                *.sh)     echo "$0: running $f"; . "$f" ;;
                *.sql)    echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;;
                *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;;
                *)        echo "$0: ignoring $f" ;;
            esac
            echo
done
以及my CreateDB.sql的内容:

CREATE TABLE web_origins (
    client_id character varying(36) NOT NULL,
    value character varying(255)
);
因此,我只需从以下内容开始我的容器:

docker run -d my-postgres
检查:

docker exec -it 6250aee43d12 bash
root@6250aee43d12:/# psql -h localhost -p 5432 -U docker -d docker
psql (9.3.13)
Type "help" for help.

docker=# \c
You are now connected to database "docker" as user "docker".
docker=# \dt
           List of relations
 Schema |    Name     | Type  | Owner
--------+-------------+-------+--------
 public | web_origins | table | docker
(1 row)

您可以找到mysql的详细信息。

如何使用docker compose处理此问题?我们是否只需要复制它,正如我在本例中看到的那样,db.sql被复制到docker entrypoint initdb.d目录中,但sql命令没有运行。@kamal如果您使用docker compose和官方postgres映像,并且希望在运行时创建资源(图像中没有)您必须使用:
-./init.sql:/docker entrypoint initdb.d/init.sql
如我所述,
postgres:image:onjin/alpine postgres:9.5卷:-./testdata/db.sql:/docker-entrypoint-initdb.d/db.sql重新启动:除非停止端口:-“5432:5432”
,但仍然没有执行。@kamal如果您使用的是
-d
标志,您可以将其删除以查找更多调试日志。在我的例子中,我发现第四个案例
“$0:ignoreing$f”
被回响,并且我能够从中跟踪根本原因。
docker exec -it 6250aee43d12 bash
root@6250aee43d12:/# psql -h localhost -p 5432 -U docker -d docker
psql (9.3.13)
Type "help" for help.

docker=# \c
You are now connected to database "docker" as user "docker".
docker=# \dt
           List of relations
 Schema |    Name     | Type  | Owner
--------+-------------+-------+--------
 public | web_origins | table | docker
(1 row)