通过proxy实现外部网络访问Docker集群内部服务

由于在本地搭建了docker hadoop集群,要想通过docker容器端口映射的方式访问多个服务节点的状态实在麻烦,并且需要为每个服务分配唯一的端口。通过网上搜索,找到一种通过在容器内部搭建socks代理,本地通过socks代理端口访问容器内部服务的方法。该方法不需要对每个服务都进行端口映射,十分有用。

首先编写Dockerfile文件:

FROM ubuntu

RUN apt update \
&& apt install -y openssh-server \
&& ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \
&& cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ADD bootstrap.sh /etc/bootstrap.sh
CMD ["bash", "/etc/bootstrap.sh"]

准备bootstrap.sh文件如下:

#! /bin/bash

/etc/init.d/ssh start
ssh -t -t -D 0.0.0.0:7001 -o StrictHostKeyChecking=no localhost

构建镜像文件

docker build -t docker-proxy:1.0 .

启动docker-proxy

docker run -p 7001:7001 --name docker-proxy --network myhadoop_default -d docker-proxy:1.0

该命令将docker-proxy加入hadoop集群所在的myhadoop_default网络,此时通过 socks5://localhost:7001 代理便可访问hadoop集群内部服务,测试成功。(谷歌浏览器可使用SwitchyOmega实现代理访问)

参考 无需端口映射,实现外部网络访问Docker集群内部服务 | 鱼喃

你可能感兴趣的:(docker,hadoop,大数据,java)