V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
estk
V2EX  ›  Docker

Docker 里的程序需要访问宿主机的 socks5,如何配置?

  •  
  •   estk · 2023-06-20 16:18:59 +08:00 · 1795 次点击
    这是一个创建于 555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    宿主机的 socks5 假设是 40000 端口

    目前解法是 docker run --network host ,但是这样变成所有端口映射了,不是想要的解法

    如果 docker run -p 40000:40000 ,又会提示宿主机该端口占用

    17 条回复    2023-06-23 02:14:21 +08:00
    Andim
        1
    Andim  
       2023-06-20 16:23:46 +08:00
    FreeEx
        2
    FreeEx  
       2023-06-20 16:34:26 +08:00
    docker run --add-host=host.docker.internal:宿主机 IP
    你在容器里面访问 host.docker.internal 即可。
    FreeEx
        3
    FreeEx  
       2023-06-20 16:35:40 +08:00
    --add-host=host.docker.internal:host-gateway
    搞错了,是这个命令
    ETiV
        4
    ETiV  
       2023-06-20 16:39:23 +08:00 via iPhone
    docker 容器内的 Gateway IP 就是宿主,你可以手动创建 network 把这 IP 固定一下

    (看到是 40000 )如果这 socks5 服务监听在 127.0.0.1 上不好使…
    estk
        5
    estk  
    OP
       2023-06-20 16:41:56 +08:00
    @ETiV #4
    对,就是要 docker 内部访问 127.0.0.1:40000 的时候,连接宿主机对应的 ip:port
    ETiV
        6
    ETiV  
       2023-06-20 16:47:46 +08:00
    那你可以在 host 上开一个 nginx 做 steam 的反向代理,把 127.1 的 40000 暴露给 docker network 的 gateway IP 上…
    villivateur
        7
    villivateur  
       2023-06-20 16:58:18 +08:00
    docker 内为啥一定要访问 127.0.0.1 呢,不能指定 ip 地址吗?
    Andim
        8
    Andim  
       2023-06-20 17:00:23 +08:00 via iPhone   ❤️ 1
    @villivateur 他可能是要用 Warp
    zhanghua0
        9
    zhanghua0  
       2023-06-20 17:12:52 +08:00 via Android
    宿主机的服务需要监听来自局域网的连接并且防火墙放行端口,容器需要把地址改成宿主在容器网络的地址
    不想这么麻烦就 --network=host 让容器使用宿主机的网络
    BeautifulSoap
        10
    BeautifulSoap  
       2023-06-20 17:17:26 +08:00
    内啥,3L 都把标准答案写出了
    estk
        11
    estk  
    OP
       2023-06-20 17:24:40 +08:00 via iPhone
    @FreeEx #3
    我试试
    @BeautifulSoap
    estk
        12
    estk  
    OP
       2023-06-20 20:31:04 +08:00
    @FreeEx #3
    设置了 --add-host=host.docker.internal:host-gateway -p 50000:40000
    然后 docker 里访问 host.docker.internal:50000 ,依然不行
    不知道是不是 socks5 无法通过 host-gateway:40000 访问
    这个我自己再研究看看
    chenjia404
        13
    chenjia404  
       2023-06-22 15:52:40 +08:00
    一个简单的方法,你宿主机的 socks5 服务监听局域网 ip ,例如 192.168.1.23:40000 ,然后在 docker 容器内访问 192.168.1.23:40000 。
    BeautifulSoap
        14
    BeautifulSoap  
       2023-06-23 00:43:29 +08:00 via Android
    @estk 那个,你首先得确保,你宿主跑的服务是监听了的 0.0.0.0:5000 地址而不是 127.0.0.1:5000
    BeautifulSoap
        15
    BeautifulSoap  
       2023-06-23 00:44:11 +08:00 via Android
    打错端口了是 4000 端口,不过意思到了就行
    estk
        16
    estk  
    OP
       2023-06-23 01:08:42 +08:00
    @BeautifulSoap #15
    是 40000 端口
    不过你提醒了我,确实需要这样设置一下,我去试试
    estk
        17
    estk  
    OP
       2023-06-23 02:14:21 +08:00
    @FreeEx #3
    host.docker.internal 据说 linux 用不了,Window 和 Mac 可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5755 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.