docker堆栈忽略不支持的选项

docker堆栈忽略不支持的选项,docker,db2,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

我正在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堆栈环境中使用,而不仅仅是docker compose

如果重要的话,我会让docker编写版本1.23.0-rc1,构建320e4819


提前感谢。

这是swarm模式目前不支持的,因为您已经显示了错误消息,并且文档已经识别。就我个人而言,我怀疑你是否真的想让你的数据库在swarm模式下运行。Docker不会为您迁移卷,因此如果在另一个节点上重新调度,您将看不到数据

您可以在github问题中了解将其添加到Swarm模式的进度,有几个问题,包括:

如果您真的需要从swarm模式运行,我看到的黑客解决方案是安排一个容器,其中安装了docker套接字并在映像中包含docker二进制文件,然后直接针对本地引擎执行docker运行命令。例如:

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套接字的任何其他人的潜在安全风险。

这是swarm模式目前不支持的,因为您显示的错误消息和文档已识别。就我个人而言,我怀疑你是否真的想让你的数据库在swarm模式下运行。Docker不会为您迁移卷,因此如果在另一个节点上重新调度,您将看不到数据

您可以在github问题中了解将其添加到Swarm模式的进度,有几个问题,包括:

如果您真的需要从swarm模式运行,我看到的黑客解决方案是安排一个容器,其中安装了docker套接字并在映像中包含docker二进制文件,然后直接针对本地引擎执行docker运行命令。例如:

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套接字的任何其他人的潜在安全风险。

问题是什么?修改了文章。谢谢。有什么问题吗?修改了帖子。谢谢。非常感谢您的回复。我希望能够在堆栈中运行,以便能够运行依赖于db2服务器的其他多个服务实例。我将密切关注您共享的github问题。@sj177您也不能在swarm中使用
dependens\u
。但是你可以使覆盖网络可连接,并从compose或swarm连接到外部网络,以获得服务通信。我认为即使在compose中,依赖也不起作用。它只按顺序启动服务,而不注意应用程序是否准备就绪。我在入口点为依赖服务进行了必要的等待。再次感谢。关于将swarm用于数据库服务而不是简单的组合的有效性(或缺乏有效性)非常有趣。我不知道该到哪里去了解更多。比如什么类型的服务适合swarm或compose……非常感谢您的回复。我希望能够在堆栈中运行,以便能够运行依赖于db2服务器的其他多个服务实例。我将密切关注您共享的github问题。@sj177您也不能在swarm中使用
dependens\u
。但是你可以使覆盖网络可连接,并从compose或swarm连接到外部网络,以获得服务通信。我认为即使在compose中,依赖也不起作用。它只按顺序启动服务,而不注意应用程序是否准备就绪。我在入口点为依赖服务进行了必要的等待。再次感谢。关于将swarm用于数据库服务而不是简单的组合的有效性(或缺乏有效性)非常有趣。我不知道该到哪里去了解更多。比如什么类型的服务适合swarm或compose。。