docker堆栈忽略不支持的选项



我在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

当使用dockercompose-up时,我在启动db2服务方面没有问题。然而,当我尝试使用docker堆栈时,我得到以下消息:

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

这使得db2start返回SQL1042C出现了一个意外的系统错误。

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

如果重要的话,我有docker compose版本1.23-rc1,构建320e4819。

提前谢谢。

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

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

  • https://github.com/moby/moby/issues/24862
  • https://github.com/moby/moby/issues/25885

如果您真的需要从群模式运行,我看到的破解解决方案是在映像中调度一个安装了docker套接字和docker二进制文件的容器,然后直接针对本地引擎执行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套接字的人的潜在安全风险。

相关内容

  • 没有找到相关文章