docker - 暴露通过 SSH 转发的 docker 端口
问题描述
我正在使用来自 docker hub 的容器,该容器是安装了 ssh-client 的 Alpine。我正在尝试在远程网络上转发 https 服务并使用 macvlan 将其分配给本地 IP。我正在使用以下 docker compose:
version: '3.3'
networks:
vlan100:
driver: macvlan
driver_opts:
parent: enp3s0
ipam:
config:
- subnet: 192.168.0.0/24
services:
dsm-over-ssh:
container_name: dsm-over-ssh
volumes:
- '~/.ssh:/root/.ssh'
command:
- '-L 443:192.168.1.3:5001'
- '-4'
- 'user@server.com'
networks:
vlan100:
ipv4_address: 192.168.0.133
tty: true
image: occitech/ssh-client
所以这个想法是启动一个永久ssh -L 443:192.168.1.3:5001 -4 user@server.com
运行的容器。
当我运行docker exec -ti dsm-over-ssh /bin/sh
,apk add curl
时,curl https://localhost -k
它会显示正确站点的代码。
但是,当我尝试从同一网络上另一台计算机上的浏览器访问https://192.168.0.133时,它最终会超时并显示连接失败。
我能够在同一台服务器上加载托管在同一 vlan 上的其他站点。我尝试将端口设置为 443:443 ,但它仍然失败并显示https://192.168.0.133。
如果我尝试从同一网络上的另一台设备 curl 我得到curl: (7) Couldn't connect to server
.
我可能在这里遗漏了一些简单的东西,有人有什么想法吗?谢谢。
解决方案
与在 Docker 容器中运行的其他服务器类型的进程一样,您的 ssh 转发器需要配置为侦听特殊的 0.0.0.0 “所有接口”地址;和许多服务器类型的进程一样,它默认监听 127.0.0.1“仅容器私有 localhost”地址。请参阅ssh (1)-L
中的选项说明,以及ssh_config (5)中的设置说明。GatewayPorts
这意味着您需要在转发器中指定备用绑定地址:
command:
- '-L0.0.0.0:443:192.168.1.3:5001'
推荐阅读
- react-native - React Native如何计算文本的字符长度?
- java - 将 int 转换为双 java
- amazon-web-services - Lambda@edge 记录发布请求 ID 但不发布控制台日志
- react-native - @react-native-community/picker 抛出注册两个同名视图的错误
- r - lubridate 解析具有多种格式的日期列并默认为月份的最后一天
- python - 就 n 和 m 而言,运行时复杂度是多少?
- python - 将 CRC16 CCITT 代码从 C 转换为 Python
- python - 如何使用 KNN 结果快速创建图(ImageNet)
- powershell - 在 PowerShell 中正确拆分所选数据和格式
- php - Codeigniter 4 验证可选值