Docker 容器中的 DB2。重新启动 Docker 容器后自动启动 SSL 配置的问题
DB2 in Docker container. Problem with autostart of SSL configuration after restarting of Docker container
我有一个 docker 容器,它从图像开始 – https://hub.docker.com/r/ibmcom/db2/
一切正常,但我需要对 SSL 连接进行一些实验。我进入了集装箱内。
docker exec -it my_container /bin/bash
我已经切换到需要的用户
su - db2inst1
并且我进行了更改,以实现 SSL 配置
gsk8capicmd_64 -keydb -create -db "server.kdb" -pw "my_secret_password" -stash
gsk8capicmd_64 -cert -create -db "server.kdb" -pw "my_secret_password" -label "my_company" -dn "CN=my_company" -size 2048 -sigalg SHA256_WITH_RSA
gsk8capicmd_64 -cert -extract -db "server.kdb" -pw "my_secret_password" -label "my_company" -target "server.arm" -format ascii -fips
gsk8capicmd_64 -cert -details -db "server.kdb" -pw "my_secret_password" -label "my_company"
db2 update dbm cfg using SSL_SVR_KEYDB /database/config/db2inst1/server.kdb
db2 update dbm cfg using SSL_SVR_STASH /database/config/db2inst1/server.sth
db2 update dbm cfg using SSL_SVCENAME 50002
db2set DB2COMM=SSL,TCPIP
db2stop force
db2start
让我们检查一下
netstat -nlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 17030/db2sysc 0
tcp 0 0 0.0.0.0:50002 0.0.0.0:* LISTEN 17030/db2sysc 0
一切正常。我测试了 SSL,一切正常。但是之后,当我制作
docker stop my_container
docker start my_container
我的 SSL 端口未启动。在 netstat 中,我只看到:
netstat -nlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 17030/db2sysc 0
当我去 docker 容器时,当我正在制作时
db2set DB2COMM=SSL,TCPIP
db2stop force
db2start
SSL 端口已打开,一切正常。
问题。我应该自动启动上面的命令吗?或者它可以通过 DB2 中的一些配置来实现?
暂时处理这种情况的一种方法是修改:
/database/config/db2inst1/sqllib/profile.env
并在该文本文件中将 DB2COMM 变量的设置从 'TCPIP' 更改为 'TCPIP,SSL'(或任何您需要的设置)。
但是,这只会在容器存在时持续存在。
因此,如果您移除容器,则需要重做。
如果您只是停止并启动容器,更改将持续存在。
要使更改永久保留,您需要更改图像(或制作新图像)以便文件具有您需要的值。可能有更优雅的解决方案。要修改图像,请查看 构建您自己的 部分中的说明 here。
我找到了正在重写 profile.env
的文件
此文件 /var/db2_setup/include/db2_common_functions
,其中此字符串:
su - ${DB2INSTANCE?} -c ". sqllib/db2profile; db2set DB2COMM=TCPIP && db2 UPDATE DBM CFG USING DFTDBPATH $DATA_DIR IMMEDIATE"
我已经替换了这个:
su - ${DB2INSTANCE?} -c ". sqllib/db2profile; db2set DB2COMM='TCPIP,SSL' && db2 UPDATE DBM CFG USING DFTDBPATH $DATA_DIR IMMEDIATE"
我有一个 docker 容器,它从图像开始 – https://hub.docker.com/r/ibmcom/db2/
一切正常,但我需要对 SSL 连接进行一些实验。我进入了集装箱内。
docker exec -it my_container /bin/bash
我已经切换到需要的用户
su - db2inst1
并且我进行了更改,以实现 SSL 配置
gsk8capicmd_64 -keydb -create -db "server.kdb" -pw "my_secret_password" -stash
gsk8capicmd_64 -cert -create -db "server.kdb" -pw "my_secret_password" -label "my_company" -dn "CN=my_company" -size 2048 -sigalg SHA256_WITH_RSA
gsk8capicmd_64 -cert -extract -db "server.kdb" -pw "my_secret_password" -label "my_company" -target "server.arm" -format ascii -fips
gsk8capicmd_64 -cert -details -db "server.kdb" -pw "my_secret_password" -label "my_company"
db2 update dbm cfg using SSL_SVR_KEYDB /database/config/db2inst1/server.kdb
db2 update dbm cfg using SSL_SVR_STASH /database/config/db2inst1/server.sth
db2 update dbm cfg using SSL_SVCENAME 50002
db2set DB2COMM=SSL,TCPIP
db2stop force
db2start
让我们检查一下
netstat -nlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 17030/db2sysc 0
tcp 0 0 0.0.0.0:50002 0.0.0.0:* LISTEN 17030/db2sysc 0
一切正常。我测试了 SSL,一切正常。但是之后,当我制作
docker stop my_container
docker start my_container
我的 SSL 端口未启动。在 netstat 中,我只看到:
netstat -nlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:50000 0.0.0.0:* LISTEN 17030/db2sysc 0
当我去 docker 容器时,当我正在制作时
db2set DB2COMM=SSL,TCPIP
db2stop force
db2start
SSL 端口已打开,一切正常。
问题。我应该自动启动上面的命令吗?或者它可以通过 DB2 中的一些配置来实现?
暂时处理这种情况的一种方法是修改:
/database/config/db2inst1/sqllib/profile.env
并在该文本文件中将 DB2COMM 变量的设置从 'TCPIP' 更改为 'TCPIP,SSL'(或任何您需要的设置)。
但是,这只会在容器存在时持续存在。
因此,如果您移除容器,则需要重做。
如果您只是停止并启动容器,更改将持续存在。
要使更改永久保留,您需要更改图像(或制作新图像)以便文件具有您需要的值。可能有更优雅的解决方案。要修改图像,请查看 构建您自己的 部分中的说明 here。
我找到了正在重写 profile.env
的文件
此文件 /var/db2_setup/include/db2_common_functions
,其中此字符串:
su - ${DB2INSTANCE?} -c ". sqllib/db2profile; db2set DB2COMM=TCPIP && db2 UPDATE DBM CFG USING DFTDBPATH $DATA_DIR IMMEDIATE"
我已经替换了这个:
su - ${DB2INSTANCE?} -c ". sqllib/db2profile; db2set DB2COMM='TCPIP,SSL' && db2 UPDATE DBM CFG USING DFTDBPATH $DATA_DIR IMMEDIATE"