如何在 docker 上连接到 DB2 运行

How to connect to DB2 running on docker

我已经在本地 Docker 桌面 docker 运行 上安装了映像 ibmcom/db2 10。

按照本指南进行设置:
https://www.ibm.com/docs/en/db2/11.5?topic=system-windows

我能够从 db2 命令提示符查询示例数据库,如下所述:
https://www.ibm.com/docs/en/db2/11.5?topic=windows-testing-your-db2-community-edition-docker-image-installation-systems

.end_list 配置文件中的参数是:

LICENSE=accept  
DB2INSTANCE=db2inst1  
DB2INST1_PASSWORD=password  
DBNAME=testdb  
BLU=false  
ENABLE_ORACLE_COMPATIBILITY=false  
UPDATEAVAIL=NO  
TO_CREATE_SAMPLEDB=false  
REPODB=false  
IS_OSXFS=false  
PERSISTENT_HOME=false  
HADR_ENABLED=false  
ETCD_ENDPOINT=  
ETCD_USERNAME=  
ETCD_PASSWORD=  

我使用这个命令启动了服务器:

docker run -h db2server --name db2server --restart=always --detach --privileged=true -p  50000:50000 --env-file .env_list -v C:/Kode/Docker/db2:/database ibmcom/db2

这很好。但我需要从 DBeaver 连接。

我试过这些参数:

Host: localhost / db2server
Port: 50000
Database: sample
Username: db2admin
Password: db2admin / DB2INST1_PASSWORD from config file

使用“localhost”作为主机时,它会立即失败并显示以下消息: [jcc][t4][2013][11249][4.26.14] 发生连接授权失败。
原因:用户 ID 或密码无效。错误代码=-4214,SQLSTATE=28000

使用“db2server”作为主机需要更长的时间,然后失败并显示以下消息: [jcc][t4][10380][11951][4.26.14] 必需 属性 “db2server”是未知主机。错误代码=-4222,SQLSTATE=08001

所以,我猜测在 docker 上使用 server/container 的名称作为主机名根本不起作用,因为该名称似乎无法解析。

使用 localhost 似乎工作得更好一些,因为错误消息似乎来自服务器,但我不知道 username/password 当我知道的那些被拒绝时我应该使用什么。

DBeaver 似乎正在使用 jdbc。

所以问题是:如何从 DBeaver 连接到 docker(同一台机器)上的 db2? 如有任何建议,我们将不胜感激!

由于身份验证(检查用户 ID 和密码)发生在容器内(即不在主机上使用 Win10),您必须使用已经在容器内创建的 userid:password 组合,例如 db2inst1 作为根据您的环境文件。

您还必须引用在容器上创建的数据库名称(例如,根据您的 env 文件的 testdb)。除非您在容器内创建该帐户,否则您不能使用用户名 db2admin。

第一次安装 xdb2 容器需要几分钟时间。第二次不会发生这种情况。 运行:

docker run -itd --name xdb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=pass1 -e DBNAME=testdb -v /home/user1/volumes/db2:/database ibmcom/db2:11.5.7.0

其中 /home/user1/volumes/db2 是将保存数据的本地目录。

然后,检查容器是否正常启动:

docker logs -f xdb2

在某些时候(需要一点时间)它显示:Setup has completed.

停止容器运行:

docker stop xdb2

启动容器运行:

docker start xdb2

连接使用 JDBC:

  • URL: jdbc:db2://192.168.56.220:50000/testdb:currentSchema=SCHEMA1;
  • 用户:db2inst1
  • 通过:<password-of-the-os-user>

上方192.168.56.220是host/IP,其中docker服务器是运行ning。