Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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_Docker_Dockerfile - Fatal编程技术网

我的postgresql容器docker上的远程控制可以工作,但看不到创建的表

我的postgresql容器docker上的远程控制可以工作,但看不到创建的表,postgresql,docker,dockerfile,Postgresql,Docker,Dockerfile,我是docker的新手,我创建了一个dockerfile来启动postgresql映像并在新数据库中插入数据 当我运行docker时,它在其容器中运行良好,我可以看到创建的数据库和表 但是,当我尝试从一个客户端postgres连接时,我看到创建的是数据库,而不是表,我们不知道为什么我和我的团队 我的DockerFile: Dockerfile 博士后:9.6.5 运行localedef-i fr_fr-c-f UTF-8-A/usr/share/locale/locale.alias fr_fr

我是docker的新手,我创建了一个dockerfile来启动postgresql映像并在新数据库中插入数据

当我运行docker时,它在其容器中运行良好,我可以看到创建的数据库和表

但是,当我尝试从一个客户端postgres连接时,我看到创建的是数据库,而不是表,我们不知道为什么我和我的团队

我的DockerFile:

Dockerfile 博士后:9.6.5 运行localedef-i fr_fr-c-f UTF-8-A/usr/share/locale/locale.alias fr_fr.UTF-8 环境语言fr_fr.utf8 复制postgresql.conf/ 复制sql/structure.sql/docker入口点initdb.d/ 我的文件SQL structure.SQL:

创建数据库DB_ALLOT_BOUCHON_NEW; 向postgres授予数据库DB_ALLOT_BOUCHON_NEW的所有特权; 如果不存在,则创建表public.SUBSCR ID BIGINT不为空, 订户名称VARCHAR100不为空, sp_数组VARCHAR100不为空, 主键ID ; 在SUBSCR ID、订阅者名称、sp_数组值1、“客户端_1”、“sp_数组客户端_1客户端_2”中插入; 在SUBSCR ID、订阅者名称、sp_数组值2、“client_2”、“sp_数组client_2 client_2”中插入; 用于生成和运行我的dockerfile的命令:

$docker build-t allot_psql。 $docker run-d-name custom_psql_running-p 5467:5432 allot_psql-c config_file=postgresql.conf $docker日志自定义\u psql\u正在运行 $docker run-it-rm-link custom_psql_running postgres psql-h custom_psql_running-U postgres postgres=从subscr中选择*; 结果在我的容器中:

postgres=从subscr中选择*; id |用户|名称| sp |数组 --+---------+-------------- 1 |客户端| sp |阵列客户端| 1客户端| 2 2 |客户端| sp |阵列客户端| 2客户端|2 2排 postgres=\d 关系清单 模式|名称|类型|所有者 ----+----+----+----- 公共| subscr |表| postgres 一排 postgres=\d* 无效命令\d*。尝试\?寻求帮助。 postgres=\dt 关系清单 模式|名称|类型|所有者 ----+----+----+----- 公共| subscr |表| postgres 一排 postgres=\d+ 关系清单 模式|名称|类型|所有者|大小|描述 ----+----+----+-----+------+------- 公共| subscr |表| postgres | 8192字节| 一排 postgres=\d 关系清单 模式|名称|类型|所有者 ----+----+----+----- 公共| subscr |表| postgres 一排 博士后=\ 无效命令\。尝试\?寻求帮助。 postgres=\q 一切似乎都很好,但当我使用postgresql客户端时,我只能看到创建的数据库,而不能看到其中的表

jdbc:postgresql://localhost:5467/db_allot_bouchon_new 用户名:postgres structure.sql脚本在默认数据库postgres中创建表,而不是在DB_ALLOT_BOUCHON_NEW中创建表。初始化容器后,您将连接到postgres。要快速修复连接到db_allot_bouchon_new,请在创建容器后立即进行

CREATE DATABASE DB_ALLOT_BOUCHON_NEW;
\connect db_allot_bouchon_new
 ...
也可能有帮助

我建议在Dockerfile中设置POSTGRES_DB环境变量,这样将创建DB,容器将把该DB作为默认DB

博士后

此可选环境变量可用于定义不同的 首次创建映像时创建的默认数据库的名称 起动。如果未指定,则将显示POSTGRES_USER的值 被使用

Dockerfile 在上面的Dockerfile中,这将创建用户appdbuser

docker exec-it custom_psql_运行bash-c psql-U appdbuser

所以,您不需要在SQL脚本中提到这两行,因为Docker image将为您这样做。所以最好去掉这些线

CREATE DATABASE DB_ALLOT_BOUCHON_NEW;
GRANT ALL PRIVILEGES ON DATABASE DB_ALLOT_BOUCHON_NEW TO postgres;
警告:

/docker entrypoint initdb.d中的脚本仅在启动 数据目录为空的容器;任何预先存在的 在容器启动时,数据库将保持不变。一个普通的 问题是如果您的/docker入口点initdb.d脚本之一 失败,这将导致entrypoint脚本退出,并且 orchestrator使用已初始化的数据重新启动容器 目录,它将不会继续使用您的脚本


非常感谢,我完全失明了,没有看到我的错误,失去了两天。你很好,很高兴我能帮上忙!非常感谢你的建议,现在它可以工作了!伟大的
CREATE DATABASE DB_ALLOT_BOUCHON_NEW;
GRANT ALL PRIVILEGES ON DATABASE DB_ALLOT_BOUCHON_NEW TO postgres;