从一个Docker容器logging到另一个

当试图连接我的Ubuntu 16.04主机上的两个容器时,我无法从一个容器发送消息到另一个容器,而主机上的地址是可用的。

我启动了一个容器(它通过syslog-ng提供了一个syslog服务):

 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连接。

现在我可以使用以下命令从主机login到容器:

 logger -n 127.0.0.1 -P 515 test123 

第二个容器开始(一次带 – --link ,一次没有)

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

在这两种情况下,日志logging不可用于容器,即

 logger -n 127.0.0.3 -P 515 

没有返回错误信息,但是没有消息被添加到日志中。 (在链接容器的情况下,也尝试使用127.0.0.1和syslog-ng)。

所以问题是:为什么login容器不可能?

如果我启动另一个容器,两个都在同一个networking上, 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": {} } ] 

这是我尝试login的Ubuntu容器上的/etc/hosts

 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 

所以syslog-ng应该可以在syslog-ng或172.17.0.3上使用。

如果我正确地理解了https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ ,链接应该可以直接login到syslog-ng ,没有链接,我仍然可以根据https://docs.docker.com/engine/userguide/networking/ ,将消息从一个容器发送到通过ip暴露端口的容器。

看起来像这样: 从一个docker集装箱login到另一个docker集装箱 ,但没有提供具体的集装箱。

有没有人知道为什么这个日志logging是不可能的?

有用。 问题出在端口号(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来访问:

所以正确的logging器将是:

logger -n syslog-ng -P 514 test123345

我希望它有帮助

BR,

Micek