您好我遇到通过SaltStack和dockerio模块将TCP和UDP配置到同一端口的问题。在这种情况下,我正在尝试为TCP和UDP端口53配置DNS。
master和minion的环境相同,详情如下:
Ubuntu 15.04
lxc-docker 1.6.2 package (from deb https://get.docker.com/ubuntu docker main)
salt-common 2015.5.0+ds-1utopic1 package
salt-minion 2015.5.0+ds-1utopic1 package (salt-minion 2015.5.0 (Lithium))
salt-master 2015.5.0+ds-1utopic1 package (salt-master 2015.5.0 (Lithium))
docker-py 1.2.2
从容器的Dockerfile:
EXPOSE 53
EXPOSE 53/udp
此容器的state.sls文件中的SaltStack相关配置(在docker.running中):
{% set hostport1 = '53' %}
{% set hostport1_proto = 'udp' %}
{% set hostport2 = '53' %}
{% set hostport2_proto = 'tcp' %}
...
- ports:
"{{ hostport1 }}/{{ hostport1_proto }}":
HostIp: ""
HostPort: "{{ hostport1 }}"
"{{ hostport2 }}/{{ hostport2_proto }}":
HostIp: ""
HostPort: "{{ hostport2 }}"
...
容器启动并成功运行。问题是只有TCP端口被映射,UDP端口仍然未映射。无论我列出TCP和UDP端口的顺序,只有TCP端口才能通过docker映射。
From docker ps -a:
0.0.0.0:53->53/tcp, 53/udp
我查看了所有可以找到的信息,并且我看到了与docker-py相关的较旧的已关闭问题,但最近似乎没有其他任何人遇到此问题。
我已确认手动运行容器可以正常工作并正确映射端口:
docker run ... -p 53:53 -p 53:53/udp ...
docker ps -a
... 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp ...
所以这向我证实了这个问题的根源或配置错误是在docker-py或SaltStack中。任何信息或配置提示将不胜感激。感谢。
答案 0 :(得分:0)
此问题的根源是HostIp:字段的配置。使用空白值“”是不可接受的。而是将HostIp设置为“0.0.0.0”可以完全解决此问题。这方面的文件不清楚。
非常感谢和赞扬Freenode IRC上的#salt频道。