You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker容器可被网络内用户直接通过SSH访问?

直接SSH访问Docker容器的实现方案

方案一:端口映射模式(配置门槛最低,适合小规模场景)

核心逻辑是将容器内置的SSH服务22端口,映射到宿主机的不同端口,用户通过宿主机IP+对应端口直接访问容器,全程不需要接触宿主机登录权限。

  • 第一步:构建带SSH服务的容器镜像
    官方基础镜像默认不带sshd服务,需要通过Dockerfile自定义构建,参考配置如下(以Ubuntu22.04为例):
    FROM ubuntu:22.04
    # 安装SSH服务
    RUN apt update && apt install -y --no-install-recommends openssh-server && rm -rf /var/lib/apt/lists/*
    RUN mkdir /var/run/sshd
    # 创建业务用户,禁止root登录提升安全性
    RUN useradd -m appuser && echo "appuser:自定义用户密码" | chpasswd
    RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    
    执行docker build -t app-ssh-image .构建镜像即可。
  • 第二步:启动容器绑定宿主机端口
    启动时将容器22端口绑定到宿主机指定端口,示例命令(替换为你自己的宿主机局域网IP、端口、容器名):
    docker run -d -p 192.168.xx.xx:10022:22 --name app-container-1 app-ssh-image
    
    多容器场景下每个容器绑定不同的宿主机端口即可,比如10023、10024分别对应不同业务容器。
  • 第三步:用户端直接访问
    用户执行ssh appuser@192.168.xx.xx -p 10022即可直接登录容器,完全不需要宿主机的登录权限。

方案二:容器分配独立局域网IP(无感知访问,适合中大规模场景)

如果局域网有空闲IP,可以给容器分配和宿主机同网段的独立IP,用户直接SSH访问该IP即可,不需要记端口号,和访问局域网普通物理机体验完全一致。

  • 第一步:创建Docker macvlan网络
    先开启宿主机物理网卡混杂模式:ip link set 宿主机物理网卡名 promisc on
    执行以下命令创建同网段macvlan网络,替换为你自己的网段、网关、物理网卡名:
    docker network create -d macvlan \
      --subnet=192.168.1.0/24 \
      --gateway=192.168.1.1 \
      -o parent=宿主机物理网卡名 \
      lan_macvlan
    
  • 第二步:启动容器指定固定IP
    启动命令示例,替换为你需要分配的IP、容器名:
    docker run -d --network lan_macvlan --ip 192.168.1.100 --name app-container-1 app-ssh-image
    
  • 第三步:用户端直接访问
    用户执行ssh appuser@192.168.1.100即可直接登录容器。

通用安全优化建议

  • 优先使用密钥登录,关闭容器SSH的密码登录功能,避免暴力破解风险
  • 非必要场景不给容器内用户分配sudo权限
  • 端口映射模式下只绑定宿主机的局域网IP,不要监听0.0.0.0避免端口暴露到公网
  • 定期更新容器内的openssh-server版本,修复安全漏洞

内容的提问来源于stack exchange,提问作者david 11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:12:02