2016-08-13 3 views
1

При попытке подключить два контейнера на моем узле ubuntu 16.04 я не могу отправлять сообщения из одного контейнера в другой, а адрес доступен на хосте.Запись из одного контейнера Docker в другой

Я начал один контейнер (который обеспечивает в системном журнале-сервис по syslog-ng) с:

docker run -d -p 127.0.0.1:515:514/udp --name syslog-ng bobrik/syslog-ng 

Этот контейнер определяется: https://github.com/bobrik/docker-syslog-ng. Согласно https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/configuring-sources-network.html, udp(ip(0.0.0.0), port(514)); в syslog-ng.conf должен принимать все ip-соединения.

Теперь я могу войти от хоста к контейнеру с помощью:

logger -n 127.0.0.1 -P 515 test123 

Второй контейнер был начат с (один раз с --link, когда без него)

docker run -it --link syslog-ng ubuntu /bin/bash 

и в обоих случаях , каротаж не доступен для контейнера, то есть

logger -n 127.0.0.3 -P 515 

не возвращается erro r, но в журнал также не добавляется сообщение. (Пробовал также 127.0.0.1 и syslog-ng в случае связанного контейнера).

Итак, вопрос в том, почему регистрация в контейнере невозможна?

Если я начинаю другой контейнер, оба находятся на одной и той же сети, docker network inspect bridge возвращается:

[ 
    { 
     "Name": "bridge", 
     "Id": "6836c8a52555f30f27001daf9b111ad41a035a31783250e043c34602ea83cfe3", 
     "Scope": "local", 
     "Driver": "bridge", 
     "EnableIPv6": false, 
     "IPAM": { 
      "Driver": "default", 
      "Options": null, 
      "Config": [ 
       { 
        "Subnet": "172.17.0.0/16", 
        "Gateway": "172.17.0.1" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Containers": { 
      "3acef55e018280571410b63b0cb7314ba354b67fb6523662b48ad09be8424423": { 
       "Name": "syslog-ng", 
       "EndpointID": "d6f2ad9cc9b5f6a5030e6061c4abb600ff7b0f16711f169954dd446f1351cb08", 
       "MacAddress": "02:42:ac:11:00:03", 
       "IPv4Address": "172.17.0.3/16", 
       "IPv6Address": "" 
      }, 
      "4f7d0101f97dca63b160e16a5e298c45f2ff51aa35085d0cdec96497a598be1a": { 
       "Name": "goofy_lamarr", 
       "EndpointID": "e357d6a99f67964bac4619d1ac984cd361a9c39137ea8d67a1ebc641e498919b", 
       "MacAddress": "02:42:ac:11:00:05", 
       "IPv4Address": "172.17.0.5/16", 
       "IPv6Address": "" 
      } 
     }, 
     "Options": { 
      "com.docker.network.bridge.default_bridge": "true", 
      "com.docker.network.bridge.enable_icc": "true", 
      "com.docker.network.bridge.enable_ip_masquerade": "true", 
      "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", 
      "com.docker.network.bridge.name": "docker0", 
      "com.docker.network.driver.mtu": "1500" 
     }, 
     "Labels": {} 
    } 
] 

Это /etc/hosts на контейнере Ubuntu, где я пытаюсь войти:

cat /etc/hosts 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.3 syslog-ng 3acef55e0182 
172.17.0.5 4f7d0101f97d 

So системного журнала -ng должен быть доступен с помощью syslog-ng или 172.17.0.3.

Если я правильно понял https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/, то ссылка должна позволять напрямую регистрироваться на syslog-ng, и без ссылки я все равно могу отправлять сообщения из одного контейнера в контейнер, который выставил порт ip, согласно до https://docs.docker.com/engine/userguide/networking/.

Кажется, что это то же самое, что и: Logging from one docker container to another, но нет конкретных контейнеров.

У кого-нибудь есть идея, почему это невозможно?

ответ

1

Это работает. Проблема была с номером порта (515), с помощью следующей команды:

docker run -d -p 127.0.0.1:515:514/udp --name syslog-ng bobrik/syslog-ng

вы говорите, что внутренний порт 514 может быть достигнут с хоста с 127.0.0.1:515. Но если вы хотите добраться до контейнера непосредственно из другого контейнера, вы можете связаться с ним с помощью syslog-ng: 514 или с 172.17.0.2: 514:

поэтому правильный регистратор будет:

logger -n syslog-ng -P 514 test123345

Я надеюсь, что это помогает

Br,

Micek

+0

Спасибо, это вопрос! Контейнеры, кажется, обмениваются внутри своей сети своими «нормальными» портами, а открытые порты используются только на хосте. –

Смежные вопросы