Создание нескольких конвейеров для создания докеров с уникальными IP-адресами

Я использую свой подход, используемый для вызова супер с безопасностью внутри сценария множественного наследования (я положил весь код)

def safe_super(_class, _inst):
    """safe super call"""
    try:
        return getattr(super(_class, _inst), _inst.__fname__)
    except:
        return (lambda *x,**kx: None)


def with_name(function):
    def wrap(self, *args, **kwargs):
        self.__fname__ = function.__name__
        return function(self, *args, **kwargs)
return wrap

использование образца:

class A(object):

    def __init__():
        super(A, self).__init__()

    @with_name
    def test(self):
        print 'called from A\n'
        safe_super(A, self)()

class B(object):

    def __init__():
        super(B, self).__init__()

    @with_name
    def test(self):
        print 'called from B\n'
        safe_super(B, self)()

class C(A, B):

    def __init__():
        super(C, self).__init__()

    @with_name
    def test(self):
        print 'called from C\n'
        safe_super(C, self)()

тестирование :

a = C()
a.test()

output:

called from C
called from A
called from B

Внутри каждого метода с украшением @with_name у вас есть доступ к self .__ fname__ в качестве текущего имени функции.

1
задан cyberbeast 16 January 2019 в 16:25
поделиться

1 ответ

Как насчет:

cat <<EOF
version: "3"
  services:
    web1:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
    web2:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
EOF

Затем получите виртуальные адреса, например:

docker ps | grep compose_ | cut -f1 -d' ' | while read s; do docker inspect $s | egrep "IPAddr.*[0-9]"; done
                "IPAddress": "172.28.0.3",
                "IPAddress": "172.28.0.2",

Затем подтвердите, что оба адреса отвечают на один и тот же порт:

$ curl -sv 172.28.0.2:8080
...
* Connected to 172.28.0.3 (172.28.0.3) port 8080 (#0)
...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
...

$ curl -s 172.28.0.3:8080
...
[ 117] Вы можете использовать пользовательские сети, чтобы изолировать контейнеры особым образом, но даже с поведением по умолчанию вы можете создать несколько экземпляров этого стека компоновки, и вы всегда будете получать уникальные виртуальные адреса, которые вы можете выборочно получать с вашего клиента. Вы можете поставить обратный прокси-сервер впереди, если хотите направить трафик внешнего клиента на определенный бэкэнд.

Вы можете иметь несколько экземпляров, переопределив имя проекта для каждого экземпляра с помощью $ COMPOSE_PROJECT_NAME или -p. Например:

docker-compose -p mytest1 up -d
docker-compose -p mytest2 up -d

Надеюсь, что помогает.

0
ответ дан ovo 16 January 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: