使用DNS公开Docker端口和访问以便于Ansible-Access

我想先用Ansible做一些testing,然后覆盖我的Liveserver上的设置。 所以我决定针对本地docker实例运行Ansible。

是否有可能暴露Docker-Contianer的端口通过DNS名称(如“mailserver.local”/“webserver.local”)访问它们,而不是将端口绑定到本地主机?

最后,我想为我的服务器设置编写一个docker-compose,其中每个docker容器的行为与我的服务器完全相同,而不考虑第30个端口绑定到localhost的位置。

我的Dockerfile

FROM ubuntu:16.04 MAINTAINER Sven Dowideit <SvenDowideit@docker.com> RUN apt-get update && apt-get install -y openssh-server python RUN mkdir /var/run/sshd RUN echo 'root:root' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 EXPOSE 80 EXPOSE 443 EXPOSE 110 EXPOSE 143 EXPOSE 25 EXPOSE 465 EXPOSE 587 EXPOSE 993 EXPOSE 995 CMD ["/usr/sbin/sshd", "-D"] 

那么,我会告诉你我是怎么做到的(虽然我正在考虑把我的第30端口绑定到localhost):

  • 我用-p 10022:22 -p 10080:80 -p 10443:443运行我的容器
  • 我在我的/etc/hosts文件中有127.0.0.1 <containername>

  • 我的<containername>:10022在我的库存清单文件中

这样,您可以轻松地运行任何想要针对单个主机名进行testing的手册。

你也可以自动恢复你的容器 – 例如,如果你想做一个干净的游戏,你需要一个容器的图像。 一个bash脚本将为此做的工作 – docker stop containernamedocker rm containername ,然后docker run ...

我现在正在使用traefik,解决了我所有的问题