从一个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