注意:读这篇文章之前最好先看看这个文章
https://blog.csdn.net/czk740960212/article/details/80393825
Docker支持端口映射,即将主机的某一端口映射到容器的端口,这样对主机这一端口的请求就会被转发到容器内,实现外部网络与容器通信的目的。
之前在部署Apache Storm系统的时候,发现web管理页里的supervisor日志无法查看,它的地址是类似storm_supervisor:8000这种形式的,而外部主机根本无法解析这个地址,即使可以解析(10.x.x.x),网络也是不互通的,无法访问。如果采取端口映射方式,一方面需要在外部主机上修改host文件,十分麻烦;另一方面,每一个supervisor都需要映射相同的端口,会造成冲突。所以这种方式无法实现,只能考虑其他方式。
某日,突然想起来自己平时用的fq方式:ssh转socks5。而且,更加完美的是,socks5默认支持远程dns解析,这样连host文件都不用改了。
说干就干,首先要找到一个安装了ssh服务的镜像(一般情况下,镜像都没有这个服务),很可惜,没有找到合适的。那就只能自己做了,也不难,就一条安装命令。
编写Dockerfile
FROM ubuntu
RUN apt update \
&& apt install -y openssh-server
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ADD bootstrap.sh /etc/bootstrap.sh
CMD ["bash", "/etc/bootstrap.sh"]
push到github上,再通过docker平台build即可。本地构建镜像也是可以的,不过这样跨机就找不到镜像了。