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

如何在docker-compose容器内执行Docker命令获取同网络容器IP?

问题与解决方案

我部署了va-server、db、api-server三个容器,它们均处于同一Docker网络中。希望在容器内执行Docker命令,获取其他同网络容器的IP地址。

我的docker-compose配置文件如下:

version: "2.3"

services:
  va-server:
    container_name: va_server
    image: nitinroxx/facesense:amd64_2022.11.28 #facesense:alpha
    runtime: nvidia
    restart: always
    mem_limit: 4G
    networks:
    - perimeter-network
  db:
    container_name: mongodb
    image: mongo:latest
    ports:
    - "27017:27017"
    restart: always
    volumes:
    - ./facesense_db:/data/db
    command: [--auth]
    networks:
    - perimeter-network
  api-server:
    container_name: api_server
    image: nitinroxx/facesense:api_amd64_2022.11.28
    ports:
    - "80:80"
    - "465:465"
    restart: always
    networks:
    - perimeter-network
  
 
networks:
  perimeter-network:
    driver: bridge
    ipam:
      config:
      - gateway: 10.16.239.1
        subnet: 10.16.239.0/24

已在容器内安装Docker,但出现如下权限错误:
docker.errors.DockerException: 获取服务器API版本时出错: ('连接已中止。', PermissionError(13, '权限被拒绝'))


解决权限错误的方法

1. 挂载Docker套接字到容器

容器内的Docker客户端需要连接宿主机的Docker守护进程,通过挂载宿主机的/var/run/docker.sock到容器内相同路径即可实现。修改docker-compose中需要执行Docker命令的服务配置,添加卷挂载:

# 以api-server为例,其他服务同理
api-server:
    container_name: api_server
    image: nitinroxx/facesense:api_amd64_2022.11.28
    ports:
    - "80:80"
    - "465:465"
    restart: always
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock  # 添加该行
    networks:
    - perimeter-network

2. 调整容器内用户权限

容器内执行命令的用户需要拥有访问/var/run/docker.sock的权限:

  • 方法一:启动容器时指定宿主机docker组的ID(先在宿主机执行getent group docker | cut -d: -f3获取组ID):
    api-server:
        # 其他配置...
        user: "你的用户ID:获取到的docker组ID"
    
  • 方法二:进入容器后将当前用户加入docker组:
    sudo usermod -aG docker $USER
    

更安全的替代方案:无需Docker命令获取容器IP

Docker网络自带DNS解析功能,直接通过容器名称即可访问,也可以用以下命令获取IP,无需在容器内安装Docker:

  • 使用nslookup查询:
    nslookup va_server
    nslookup mongodb
    
  • 使用getent hosts查询:
    getent hosts va_server
    

这种方式避免了暴露Docker套接字的安全风险,更推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:05:37