gpt4 book ai didi

docker - Docker 中的 DB2 客户端

转载 作者:行者123 更新时间:2023-12-02 18:07:27 24 4
gpt4 key购买 nike

我们需要创建一个还安装了 db2 客户端的 docker 容器。该容器还将有一些使用 db2 客户端的 shell 脚本。

我们获取基本 Cent OS 镜像,然后通过 RUN 命令添加 db2:

COPY  db2rtcl_nr.rsp /db2install/
RUN cd /db2install && curl -o ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz http://public_file_server.com/downloads/appTools/installs/db2/ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
tar -xvf ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
rm -f ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
rtcl/db2setup -u db2rtcl_nr.rsp -f sysreq && \

chown -R 1000:1000 /opt/ibm/db2/V11.1

ENV PATH="$PATH:/opt/ibm/db2/V11.1/bin"

图像构建正常,没有错误。

但是,当我尝试通过交互式 shell 命令运行并连接到容器时:
docker run -it --entrypoint=/bin/bash db2Container

并尝试调用 db2 CLI
db2

我收到错误:

DB21018E A system error occurred. The command line processor could not continue processing.



令人困惑的是,如果我立即运行 bash shell 然后调用 db2 CLI,它的工作原理:
bash
db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.1.0

You can issue database manager commands and SQL statements from the command
prompt. For example:
db2 => connect to sample
db2 => bind sample.bnd

For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
? CATALOG DATABASE for help on the CATALOG DATABASE command
? CATALOG for help on all of the CATALOG commands.

To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.

For more detailed help, refer to the Online Reference Manual.

db2 =>

我试图诊断问题的事情:
  • 当我第一次进入交互式 shell session 时,我输入env > /tmp/env1.txt然后我输入 bash并运行env > /tmp/env2.txt当我diff文件,它们几乎相同,除了变量:SHLVL=2我知道这只是表明第二个 shell 是嵌套 shell
  • 当我第一次进入交互式 shell session 时,我输入set > /tmp/set1.txt然后我输入 bash并运行set > /tmp/set2.txt当我diff文件,除了 SHLVL 之外,它们几乎完全相同再次变量

  • 为什么在我之后可以访问 db2 CLI bash在容器中但不是在我使用过的初始 session 中 docker run -it ?

    我们尝试将此容器用作可执行容器,其中包含 db2 客户端以连接到外部 DB2 数据库。我们不是试图在容器中运行 db2 DB。

    我开始发现,我可能对 Dockerfile 中如何定义入口点有疑问。
    使用:
    ENTRYPOINT cat /dev/null && /usr/bin/bash

    当我运行 docker run -it ContainerName 时,DB2 客户端可用无需立即输入 bash
    但是当我尝试将容器作为可执行文件运行时它不起作用 docker run ContainerName
    我最接近解决方案的是对 Dockerfile 的这种修改:
    ENTRYPOINT []

    CMD ["/bin/bash"]

    当我将容器作为可执行文件运行时 docker run ContainerName db2 list command options但是现在如果我 docker run -it ContainerName 就可以了我没有立即拥有 db2无需键入即可使用命令 bash一次。这仍然是有问题的,因为此容器中将包含需要能够运行 db2 命令的 shell 脚本

    最佳答案

    经过更多的谷歌搜索,我找到了这篇文章:https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html

    使用他们的 Github page例如,我更新了我们的 Dockerfile:

    RUN wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64
    RUN chmod +x /usr/local/bin/dumb-init

    并且还更新了我们 Dockerfile 的入口点:
    ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
    CMD ["/bin/bash"]

    结果是,当 docker 容器作为可执行文件被调用时,我的位于容器内的虚拟 shell 脚本(其中包含一个 db2 命令)可以工作:
    docker run myContainer /scripts/dummyDB2connect.sh

    而且我还可以交互启动并连接到容器以运行 db2 命令,而无需输入额外的 bash命令。

    关于docker - Docker 中的 DB2 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284001/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com