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