【问题标题】:DB2 in Docker container. Problem with autostart of SSL configuration after restarting of Docker containerDocker 容器中的 DB2。重启 Docker 容器后自动启动 SSL 配置的问题
【发布时间】:2020-11-11 10:21:12
【问题描述】:

我有一个 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

什么时候去码头集装箱,什么时候做

db2set DB2COMM=SSL,TCPIP
db2stop force
db2start

SSL 端口已启动,一切正常。

问题。我应该自动启动上面的命令吗?或者可以通过 DB2 中的一些配置来实现?

【问题讨论】:

    标签: docker db2 systemd init autostart


    【解决方案1】:

    临时处理这种情况的一种方法是修改: /database/config/db2inst1/sqllib/profile.env 并在该文本文件中将 DB2COMM 变量的设置从“TCPIP”更改为“TCPIP,SSL”(或任何您需要的)。

    但是,这只会在容器存在时持续存在。

    因此,如果您移除容器,您将需要重做。

    如果您只是停止并启动容器,更改将持续存在。

    要使更改永久保留,您需要更改图像(或制作新图像),以便该文件具有您需要的值。可能有更优雅的解决方案。要修改图像,请查看构建您自己的部分中的说明here。

    【讨论】:

    • 我已经在 profile.env 中有 DB2COMM='TCPIP,SSL' DB2AUTOSTART='YES' 。在容器停止和启动后,我只看到端口 50000
    • 奇怪。它对我来说正常工作。编辑问题以在 db2inst1 中显示 db2level 的文本输出? (不要在这里添加它作为评论)。您是如何启动容器的(编辑问题以显示完整的命令行掩码任何密码,以便我们可以看到音量选项。您始终可以按照答案中的说明构建自己的映像。
    • 更新,重启容器后,我看到 DB2COMM='TCPIP,SSL' 正在更改为 DB2COMM='TCPIP'
    • 可能是什么原因?某处自动启动脚本?
    • 我只是使用默认容器hub.docker.com/r/ibmcom/db2就是这样
    【解决方案2】:

    我找到了正在重写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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 2018-05-16
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多