码头工人栈忽略不支持的选项

时间:2018-11-05 22:17:20

标签: docker db2

我正在centos 7.5上运行docker服务器版本:18.06.0-ce。

我有一个运行db2服务器的docker-compose文件,具有以下示例定义:

docker-compose文件具有以下选项:

version: "3.7"
services:
    db2exp:
        image: db2
        ports:
            - "50000:50000"
        networks:
            - lmnet
        ipc: host
        cap_add:
            - IPC_LOCK
            - IPC_OWNER
        environment:
            - DB2INSTANCE=db2inst1
            - DB2PASSWD=db2inst1
            - LICENSE=accept
        volumes:
            - db2data:/home

使用docker-compose up时,启动db2服务没有问题。但是,当我尝试使用docker stack时,出现以下消息:

docker stack deploy test --compose-file docker-compose.yml
Ignoring unsupported options: cap_add, ipc

这使db2start返回SQL1042C。发生意外的系统错误。

如果compose中的内容在堆栈中运行,那将是理想的选择。可以做些什么,以便db2容器不仅可以在docker-compose中使用,还可以在docker堆栈环境中使用?

如果有关系,我有docker-compose版本1.23.0-rc1,内部版本320e4819。

谢谢。

1 个答案:

答案 0 :(得分:0)

目前群集模式不支持此操作,因为您显示的错误消息和文档可以识别。我个人会问您是否真的要让数据库以群集模式运行。 Docker不会为您迁移卷,因此如果将其重新安排在另一个节点上,您将看不到数据。

您可以在github问题中关注将其添加到Swarm模式的过程,其中包括:

如果您真的需要从集群模式运行,我见过的一个骇人解决方案是安排一个容器,其中该容器安装了docker socket和镜像中的docker binaries,然后直接针对本地引擎执行docker run命令。例如:

version: "3.7"
services:
    db2exp-wrapper:
        image: docker:stable
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        command: docker run --rm --cap-add IPC_LOCK --cap-add IPC_OWNER -p 50000:50000 ... db2

我真的不推荐上述解决方案,坚持使用docker-compose可能是您使用案例的更好实现。该解决方案的缺点包括仅在单个主机上发布端口,以及有权访问该Docker套接字的其他任何人的潜在安全风险。