如何给docker容器添加host映射

应用放在 docker container 中运行,但需要连接外面的 mongodb replicaset。初始化副本集时使用了 hostname 而非 ip。原本以为应用内配置 mongodb 时只要提供了 ip:port,ip:port… 列表就不需要为 docker container 配置 mongodb replset host 映射了,但测试发现应用无法建立与副本集的连接,猜想给 docker container 添加 host 映射估计就行了。咋添加呢?最直接的办法就是在 Dockerfile 中使用命令修改 hosts 文件:

1
2
3
RUN echo "192.168.1.3 playplus.mongo.arbiter" >> /etc/hosts \
; echo "192.168.1.3 playplus.mongo.node1" >> /etc/hosts \
; echo "192.168.1.1 playplus.mongo.node2" >> /etc/hosts

但实际测试发现 hosts 文件并没有被修改,具体原因还不知道,有空了得深究。
google 找到了解决办法:

1
docker run ... --add-host p.mongo.node1:192.168.1.3 ...

验证可行。

待深究的问题:

  1. 为什么在 Dockerfile 中通过命令修改 hosts 文件,启动容器发现并未修改?
  2. 应用连接 mongodb replset 时为什么不直接使用应用中配置的 ip 列表,而是使用 hostname?连接 mongodb replset 的具体过程是怎样的?
0%