You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动