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

为何docker-compose创建的容器无法用docker ps查看?Ubuntu环境异常

排查Ubuntu下docker-compose创建的容器无法用docker ps查看的问题

问题描述

通过docker-compose up -d创建并运行的MySQL容器,在Ubuntu 20.04.4 LTS系统中执行docker ps无法查到该容器,但进入docker-compose.yaml所在目录执行docker-compose ps能看到容器处于Up状态;相同操作在Windows系统中docker ps可正常显示容器。

环境信息:

  • Docker version 20.10.17, build 100c701
  • docker-compose version 1.25.0, build unknown
  • Ubuntu 20.04.4 LTS

终端输出示例:

/GIT/project$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
/GIT/project$ cd scripts/
/GIT/project/scripts$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
/GIT/project/scripts$ docker-compose ps
    Name                  Command               State                       Ports                    
-----------------------------------------------------------------------------------------------------
scripts_db_1   docker-entrypoint.sh --def ...   Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp,    
                                                        33060/tcp                                    

对应的docker-compose.yaml内容:

version: '3.3'
services:
  db:
    image: mysql:5.7
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - 3306:3306
    expose:
      # Opens port 3306 on the container
      - 3306
      # Where our data will be persisted
    volumes:
      - treip:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: changeit
      MYSQL_DATABASE: treip
volumes:
  treip:

排查思路

1. 检查Docker上下文配置

  • 执行docker context ls查看当前使用的上下文,确认是否误切换到非默认上下文(如远程主机、K8s相关上下文)。若当前不是default上下文,执行docker context use default切换回本地上下文。

2. 验证Docker服务状态与用户权限

  • 检查Docker服务运行状态:sudo systemctl status docker,若服务异常,执行sudo systemctl restart docker重启服务。
  • 确认当前用户是否在docker用户组:groups $USER,若未包含docker组,执行sudo usermod -aG docker $USER,然后重新登录会话使权限生效。
  • 尝试用sudo docker ps查看容器,排除权限不足导致的容器不可见问题。

3. 排查容器过滤规则与可见性

  • 执行docker ps -a查看所有容器(包括已停止的),确认容器是否真实存在。
  • 通过容器名称精准查询:docker ps -f name=scripts_db_1,验证是否能定位到目标容器。
  • 检查是否存在自定义的docker ps别名或环境变量,导致默认只显示特定过滤条件的容器。

4. 检查docker-compose与Docker版本兼容性

当前使用的docker-compose 1.25.0版本较旧,与Docker 20.10.17可能存在兼容性问题:

  • 可升级到Compose V2版本(Docker官方推荐),通过apt安装:sudo apt install docker-compose-plugin,之后用docker compose ps替代原docker-compose ps命令操作。
  • 若坚持使用Compose V1,可下载对应版本的二进制文件替换旧版,确保版本与Docker匹配。

5. 检查Docker存储驱动与元数据

  • 查看Docker存储驱动:docker info | grep Storage Driver,Ubuntu默认使用overlay2,若驱动异常可能导致容器元数据无法正常读取。
  • 检查Docker数据目录(默认/var/lib/docker)的磁盘空间与权限:df -h /var/lib/docker、ls -ld /var/lib/docker,确保有足够磁盘空间且目录权限正确(通常为root:docker)。

6. 验证容器实际运行状态

  • 查看容器详细信息:docker inspect scripts_db_1,确认容器的State、PID等字段是否正常。
  • 检查容器日志:docker logs scripts_db_1,排查是否存在启动异常导致容器假死(虽docker-compose ps显示Up但实际未正常运行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:17:03