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

如何从容器内部控制docker compose管理的所有服务容器?

问题根因

Docker Compose 通过**项目名称(project name)**对应的容器标签来识别同属一个配置栈的容器,默认项目名称为执行docker compose up命令时的当前工作目录名称。
你在宿主机启动服务时,采用的是宿主机当前目录的名称作为默认项目名;但在容器内执行查询命令时,配置文件挂载到了/tmp目录下,Compose默认取tmp作为项目名,和宿主机启动时的项目名不匹配,因此查询结果为空。

解决方案

方法1:显式指定项目名

首先在宿主机执行以下命令,获取实际使用的项目名:

docker inspect redis-1 | grep com.docker.compose.project

得到项目名(例如为myproject)后,在容器内执行命令时添加-p参数指定该项目名即可:

docker run -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /current_directory/:/tmp/ \
  docker/compose -f /tmp/docker-compose.yml -p myproject ps

方法2:保持工作目录路径一致

挂载配置目录时保持宿主机和容器内的路径一致,同时指定容器的工作目录为该路径,即可让Compose自动匹配到正确的项目名。假设宿主机的配置目录为/home/user/myproject,执行命令如下:

docker run -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/user/myproject:/home/user/myproject \
  -w /home/user/myproject \
  docker/compose ps

注意事项

  • 确保容器内的Docker Compose大版本和宿主机一致,你宿主机使用的是Compose V2,官方docker/compose镜像默认搭载V1版本,建议使用自行构建的带Compose V2的镜像,执行命令时注意区分docker compose(V2)和docker-compose(V1)。
  • 不需要修改Docker Socket的所有者,只要容器内执行命令的用户拥有/var/run/docker.sock的读写权限即可,默认root用户可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:07