Linux Mint下Docker引擎升级依赖问题及Compose版本兼容解决
解决Linux Mint上Docker Compose与Engine版本不兼容问题
嘿,我帮你捋清楚这个问题的解决办法——你遇到的是Docker Compose和Docker Engine版本不兼容的典型坑,结合Linux Mint的包管理特性,咱们一步步来搞定:
问题根源拆解
你看到的ERROR: client and server don't have same version (client : 1.22, server: 1.18),本质是Docker Compose(客户端)要求的API版本,你的Docker Engine(服务端)不支持。手动设置COMPOSE_API_VERSION只是强制指定版本,但没法从根本解决Engine版本过旧的问题;而升级docker-engine时遇到的依赖问题,是因为Linux Mint默认源里的系统库版本跟不上官方Docker包的要求。
具体解决步骤
1. 彻底清理旧的Docker相关包
先把系统里所有旧的Docker组件卸载干净,避免残留冲突:
sudo apt-get purge docker-engine docker docker.io docker-ce docker-ce-cli docker-compose sudo apt-get autoremove --purge docker-engine docker docker.io docker-ce docker-compose sudo rm -rf /var/lib/docker sudo rm -rf /etc/docker sudo rm -rf /usr/local/bin/docker-compose
2. 添加Docker官方源(替换系统默认源)
Linux Mint基于Ubuntu,但系统自带的源里Docker版本偏旧,所以改用官方源:
# 添加官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加官方源(注意:Mint的代号和Ubuntu不一样,需要手动替换成对应Ubuntu代号) # Mint 20.x → focal;Mint 21.x → jammy echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
小提示:可以用
lsb_release -cs查看当前系统代号,如果输出是Mint自己的(比如vera、una),一定要替换成对应的Ubuntu代号!
3. 安装最新版Docker Engine和Docker Compose
更新源后安装官方最新版:
sudo apt-get update # 安装Docker核心组件 sudo apt-get install docker-ce docker-ce-cli containerd.io # 安装Docker Compose(现在官方已经整合到Docker CLI,也支持传统docker-compose命令) sudo apt-get install docker-compose-plugin
验证安装是否成功:
# 检查Docker Engine版本 docker --version # 检查Docker Compose版本(两种方式都可以) docker compose version # 如果习惯用旧的docker-compose命令,创建软链接: sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose docker-compose --version
4. 调整Docker Compose文件并重启应用
确保你的docker-compose.yml使用兼容最新版本的语法,推荐用version: '3.8'(兼顾新特性和兼容性),然后重新启动:
# 后台启动服务 docker-compose up -d
额外排查点
- 如果遇到权限问题,把当前用户加入docker组(无需每次sudo):
执行后重新登录系统生效。sudo usermod -aG docker $USER - 检查你的Dockerfile是否使用了过时的基础镜像,比如用
node:18-alpine代替旧版Node镜像,避免镜像层面的兼容性问题。
附你提供的配置文件参考
docker-compose.yml
version: '3.8' services: app: build: . ports: - "3000:3000" depends_on: - redis - mysql environment: REDIS_URL: redis://redis:6379 MYSQL_URL: mysql://root:root@mysql:3306/myapp redis: image: redis:alpine restart: always mysql: image: mysql:8.0 restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: myapp volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:
Dockerfile
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Docker Info(示例)
Client: Context: default Debug Mode: false Plugins: compose: Docker Compose (Docker Inc., v2.19.1) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 24.0.5 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Using metacopy: false Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: systemd Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: 8165feabfdfe38c65b599c4993d227328c231fca runc version: v1.1.8-0-g82f18fe init version: de40ad0 Security Options: apparmor seccomp Profile: builtin cgroupns Kernel Version: 5.15.0-84-generic Operating System: Linux Mint 21.2 OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.77GiB Name: mint-workstation ID: ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
内容的提问来源于stack exchange,提问作者SPD




