У меня есть сервер с несколькими IP-адресами. Я хочу, чтобы разные контейнеры nginx прослушивали :80
и :443
на двух IP-адресах на этом хосте.
/srv/www1/docker-compose.yml
:
nginx:
image: nginx:mainline-alpine
container_name: www1
ports:
- "69.69.69.1:80:80/tcp"
- "69.69.69.1:443:443/tcp"
/srv/www2/docker-compose.yml
:
nginx:
image: nginx:mainline-alpine
container_name: www2
ports:
- "69.69.69.2:80:80/tcp"
- "69.69.69.2:443:443/tcp"
ИлиПервый контейнер может запуститься без проблем, но если я попытаюсь запустить второй контейнер ( www2
например), пока первый уже запущен, первый контейнер остановится и возникнет эта ошибка:
WARNING: Found orphan containers (www1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Нет, это не тот же контейнер, docker-compose.yml
файлы даже не в том же каталоге. Похоже, что docker использует поля image:
и ports:
дляидентифицироватьконтейнеры, но игнорирует IP-адреса.
Это баг? Как заставить это работать?
решение1
Запуск контейнеров из одного файла docker-compose работает.
/srv/www/docker-compose.yml
:
version: '3'
services:
nginx1:
image: nginx:mainline-alpine
container_name: www1
ports:
- "69.69.69.1:80:80/tcp"
- "69.69.69.1:443:443/tcp"
nginx2:
image: nginx:mainline-alpine
container_name: www2
ports:
- "69.69.69.2:80:80/tcp"
- "69.69.69.2:443:443/tcp"
Проверьте это с помощью ss
:
# ss -tln | grep ':80 \|:443 '
LISTEN 0 4096 69.69.69.1:443 0.0.0.0:*
LISTEN 0 4096 69.69.69.2:443 0.0.0.0:*
LISTEN 0 4096 69.69.69.1:80 0.0.0.0:*
LISTEN 0 4096 69.69.69.2:80 0.0.0.0:*