【发布时间】:2020-07-01 06:03:18
【问题描述】:
我正在尝试构建一个安装了 xrdp 服务的 linux docker 容器,这样我就可以通过 localhost 接口和主机网络 eth0 ip 接口远程访问 RDP 服务。我无法理解我在这里缺少 docker 网络并正确启动容器。 Docker 在 Ubuntu Linux 20.04 上运行。作为测试,当我运行这个 docker 命令时:
docker run --rm -d --network host --name my_nginx nginx
我观察到 nginx 正在侦听端口 80 并暴露在 localhost 接口上,我可以使用浏览器访问它。验证:
sudo netstat -tulpn | grep 80
现在这是我正在尝试构建和启动的 linux 容器。我使用 Dockerfile 来启动 xrdp 服务。
FROM kalilinux/kali-rolling
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get -y update && apt-get -y dist-upgrade && apt-get -y autoremove && apt-get install -y wget && apt-get clean
RUN apt-get -y install vim net-tools whois netcat exploitdb man-db dirb nikto wpscan uniscan nodejs npm python3-pip tor proxychains
RUN apt-get install xrdp lxde-core lxde tigervnc-standalone-server -y
COPY ./xrdp.ini /etc/xrdp/xrdp.ini
COPY ./Xwrapper.config /etc/X11/Xwrapper.config
RUN service xrdp start
ENTRYPOINT ["/bin/bash"]
现在我构建容器并尝试像这样运行它:
docker run --rm -d --network host --name my_kali kali
容器看起来不像在运行,并且在 lo 或 eth0 接口上没有侦听端口 3389。现在,当我以另一种方式运行容器时,我可以通过 Docker0 IP 接口 (172.17.0.2) 使用 RDP 客户端访问主机:
docker run -ti kali
但这只会暴露 Docker0 专用网络上的 RDP 服务。目标或用例是构建一个可以通过主机的 eth0 接口访问的容器。用户可以 RDP 进入它并使用 GUI 运行工具。对我在这里缺少的任何帮助表示赞赏。
【问题讨论】:
-
通常一个 Docker 容器需要运行它作为前台进程运行的单个服务器进程;由于图像不会持续运行进程,
RUN service ... start不会做任何事情。如果您将ENTRYPOINT替换为在前台启动服务器的CMD,您应该能够使用普通的docker run -p选项连接到它。 -
感谢您的洞察力。我试图实现但仍然在这里遗漏了一些东西。我尝试了
CMD ["service xrdp start"],然后尝试了docker run -p 3389:3389,但出现“OCI 运行时创建失败”和“$PATH 中找不到可执行文件”的错误。我将继续对此进行一些研究、阅读和测试。 -
首先,您应该假设像
service这样的命令在 Docker 中不起作用。作为前台进程直接启动服务器,而不是通过初始化脚本或包装器。 -
终于搞定了。以默认方式运行会自动将服务妖魔化到后台。找到 -n 的特殊标志,使其成为前台。感谢您的帮助。
标签: docker dockerfile kali-linux