我的postgresql容器docker上的远程控制可以工作,但看不到创建的表
我是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,请在创建容器后立即进行我的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
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;