为何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
相关产品推荐
相关产品推荐

