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

Docker Compose容器间通信故障:无法解析主机名mysshserver

问题:Docker Compose容器无法解析服务名称mysshserver

执行ssh命令时出现如下错误:

appuser@54e703cf6eb6:/app$ ssh test@mysshserver
ssh: Could not resolve hostname mysshserver: Name or service not known

已通过docker compose up --build mysshserver -d启动mysshserver服务,相关配置文件及容器网络信息如下:

Docker Compose文件

version: '3.9'

services:
  mysshserver:
    image: mysshserver
    build:
      dockerfile: ssh/Dockerfile
    ports:
      - "22:22"

  myapp:
    image: myapp
    build:
      dockerfile: app/Dockerfile

ssh Dockerfile

FROM ubuntu:latest

COPY shared/ssh-keys/id_rsa.pub /keys/

# Update package list and install [openssh-server, sudo]
RUN apt update && \
    apt install  openssh-server sudo -y && \
# Configure user test with password test
    useradd -rm -d /home/test -s /bin/bash -g root -G sudo -u 1000 test && \
    echo 'test:test' | chpasswd && \
# Add ssh key
    mkdir -p /home/test/.ssh/ && \
    chmod 0700 /home/test/.ssh  && \
    touch /home/test/.ssh/authorized_keys && \
    chmod 600 /home/test/.ssh/authorized_keys && \
    cat /keys/id_rsa.pub >> /home/test/.ssh/authorized_keys && \
# Start ssh
    service ssh start

EXPOSE 22

CMD ["/usr/sbin/sshd","-D"]

app Dockerfile

FROM ubuntu:latest

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

RUN apt update && \
    apt install -y openssh-client python3-pip python3 

# Install pip requirements
COPY app/requirements.txt .
RUN pip install -r requirements.txt

WORKDIR /app
COPY app /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
RUN adduser --home /home/appuser -u 5678 --disabled-password --gecos "" appuser && \
    chown -R appuser /app && \
    mkdir -p /home/appuser/.ssh

# Setup ssh public key
COPY shared/ssh-keys/id_rsa /home/appuser/.ssh

USER appuser

CMD ["python3", "app.py"]

容器inspect网络信息

"Networks": {
            "codespaces-blank_default": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "codespaces-blank-mysshserver-1",
                    "mysshserver",
                    "624f5d61df83"
                ],
                "NetworkID": "6d6278f57d215ab3d28fea84d44957e43d480b6b262e8d1f6323ff38becaa852",
                "EndpointID": "9160e6bc48689fdfb36bbdf614913121a0528d93a1dfe5a1e6d60e75fbb4082b",
                "Gateway": "172.26.0.1",
                "IPAddress": "172.26.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:1a:00:02",
                "DriverOpts": null
            }
        }

排查与解决方法

  • 确认容器是否在同一网络
    执行以下命令检查myapp容器的网络归属:

    docker inspect myapp --format '{{.NetworkSettings.Networks}}'
    

    如果myapp不在codespaces-blank_default网络,停止容器后用docker compose up myapp -d启动,Docker Compose会自动将服务加入默认网络。

  • 检查DNS配置
    进入myapp容器查看DNS配置文件:

    docker exec -it myapp cat /etc/resolv.conf
    

    确认是否包含Docker DNS服务器(通常是容器网关地址,比如172.26.0.1)。如果配置异常,重启myapp容器即可自动修复。

  • 用IP测试连通性
    在myapp容器内直接pingmysshserver的IP:

    ping 172.26.0.2
    

    若能ping通但无法解析名称,说明是DNS解析问题;若ping不通,检查mysshserver容器是否正常运行,或是否有防火墙规则拦截22端口。

  • 调整服务启动顺序
    在Docker Compose中给myapp添加depends_on,确保mysshserver先启动:

    services:
      myapp:
        # ...其他配置
        depends_on:
          - mysshserver
    

    若需要等待mysshserver服务完全就绪,可添加健康检查:

    mysshserver:
      # ...其他配置
      healthcheck:
        test: ["CMD-SHELL", "ssh -o ConnectTimeout=1 test@localhost echo ok"]
        interval: 5s
        timeout: 2s
        retries: 3
    
    myapp:
      depends_on:
        mysshserver:
          condition: service_healthy
    
  • 重置Docker网络
    若短名称解析存在临时问题,尝试用完整容器名称codespaces-blank-mysshserver-1测试,若能解析则重置网络:

    docker compose down
    docker network prune
    docker compose up -d
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:25:21