Я использую docker версию
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:15 2018
OS/Arch: linux/amd64
Experimental: false
и docker - составлять для настройки моих сервисов. Я хочу иметь 3 реплики сервера, которые работают на некоторых специально помеченных 3 узлах. Для этого я использую конфигурацию yaml, например:
version: '3.7'
services:
ser:
deploy:
placement:
constraints:
- "node.labels.cloud.type == nodesforservice"
replicas: 3
restart_policy:
condition: any
rollback_config:
delay: 0s
parallelism: 0
update_config:
delay: 6s
parallelism: 1
environment:
- affinity:service!=stackname_servicename
image: service:latest
и развертываю эту конфигурацию через
docker stack deploy --compose-file docker-stack.yml stackname
Но я обнаружил, что affinity:service!=stackname_servicename
не работает должным образом (или не работает на все ). Работает только в устаревшем автономном режиме. Если в настоящее время доступно только 2 узла, служба будет развернута на каком-либо узле дважды. И это то, чего я стараюсь избегать.
Есть ли какая-либо возможность в рое docker прямо сказать, что 2 контейнера одного и того же сервиса не разрешены? Я нашел только возможность создавать глобальные сервисы с --mode global
, но мне нужно только 3 экземпляра, а не больше.