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

如何通过名称对运行中的Docker容器执行ping操作及SSH连接

Docker容器SSH访问配置及构建报错解决方案

一、Dockerfile构建报错修复

报错原因

  • invoke-rc.d报错:Docker镜像构建阶段无运行中的systemd环境,使用systemctl enable sshd命令会执行失败
  • 符号链接层级过多报错:基础镜像systemd相关配置存在循环链接,安装openssh-server时触发systemd初始化逻辑导致报错

修复后的Dockerfile对应片段

COPY launchpad.key /tmp/launchpad.key

RUN apt-get update && \
    apt-get install -y software-properties-common && \
    # 安装ssh服务,不触发systemd操作
    apt-get install -y openssh-client openssh-server && \
    # 手动配置sshd,允许密码登录,若用公钥登录可跳过该步,自行把公钥放入对应用户的~/.ssh/authorized_keys文件即可
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
    # 不需要systemctl enable,容器启动时手动启动sshd即可
    apt-key add /tmp/launchpad.key && \
    add-apt-repository -y ppa:git-core/ppa && apt-get update && \
    apt-get install -y git libxt-dev libxtst6 libnss3 libnspr4 \
        libgbm-dev libxss-dev libasound2 libatk-bridge2.0-0 \
        libcanberra-gtk-module libcanberra-gtk3-module valgrind sudo \
        libx11-xcb-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /tmp/*

RUN groupadd --system ${UNAME} --gid ${UID} && \
    useradd --uid ${UID} --system --gid ${UNAME} --home-dir /home/${UNAME} --create-home --comment "Docker image user" ${UNAME} && \
    chown -R ${UNAME}:${UNAME} /home/${UNAME} && \
    usermod -aG sudo ${UNAME} && \
    echo "${UNAME}  ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${UNAME} && \
    # 给用户设置SSH登录密码,可自行替换为自定义密码
    echo "${UNAME}:your_custom_password" | chpasswd

COPY --from=tool_base ${TOOL_DIR} ${TOOL_DIR}

# 修正原有语法错误,补全变量符号$
USER ${UNAME}

容器启动命令修正

原有启动命令同时配置了--net host和-p 127.0.0.1:2222:22,二者存在冲突,host网络模式下端口映射规则不生效,根据需求二选一即可:

  • 若使用桥接网络:删除--net host参数,保留端口映射,容器内22端口会映射到宿主机127.0.0.1的2222端口
  • 若使用host网络:删除端口映射参数,容器sshd的22端口会直接占用宿主机的22端口

容器启动后手动执行sudo service ssh start即可启动sshd服务,也可以将该命令放进容器启动脚本中实现自动执行。

二、问题解答

1. 如何对该Docker容器执行ping操作

  • 桥接网络模式:执行docker inspect my_docker | grep IPAddress获取容器IP,直接ping该IP即可
  • host网络模式:容器和宿主机共享网络栈,直接ping宿主机IP即可

2. 如何通过SSH连接到该Docker容器

  • 桥接网络模式:执行ssh ${UNAME}@127.0.0.1 -p 2222,输入之前设置的密码即可登录
  • host网络模式:执行ssh ${UNAME}@127.0.0.1 -p 22即可登录

3. 如何从宿主机之外的其他电脑通过SSH连接到该Docker容器

  • 桥接网络模式:启动容器时将端口映射规则改为-p 0.0.0.0:2222:22,放开宿主机防火墙的2222端口入站规则,外部设备执行ssh ${UNAME}@宿主机局域网/公网IP -p 2222即可
  • host网络模式:放开宿主机防火墙22端口入站规则,外部设备执行ssh ${UNAME}@宿主机局域网/公网IP -p 22即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:07