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

Ubuntu18下Docker-Compose 3.9/3.3版本构建失败求助

问题解决:Ubuntu18下Docker Compose构建失败的两个问题

问题1:docker-compose.yml 3.9版本不被支持

原因

Ubuntu18.04默认预装的docker-compose版本过低(通常为1.21.x),而Compose文件格式3.9需要docker-compose 1.29.0+或Docker Engine 20.10.0+才能支持。

解决方法

方案1:升级docker-compose

执行以下命令安装最新稳定版docker-compose:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证版本
docker-compose --version

升级后可直接使用3.9版本的配置文件。

方案2:降低Compose文件版本

若不想升级docker-compose,可将配置文件的version: '3.9'改为version: '3.7'(该版本兼容docker-compose 1.25.0+,Ubuntu18.04通过官方源升级到1.25+难度低)。


问题2:改为3.3版本后包无法认证、webserver构建失败(返回码100)

原因

错误来自webserver服务的Docker构建过程,本质是APT源密钥过期或未正确更新,导致安装包时无法验证签名。另外你的配置文件存在拼写错误:/usr/local/etc/php/conf.de/php-ini-overwrites.ini中的conf.de应为conf.d,这会导致PHP配置无法生效。

解决方法

  1. 修正docker-compose.yml中的路径错误
    将webserver的volumes配置里的conf.de改为conf.d:
- ./webserver/php-ini-overwrites.ini:/usr/local/etc/php/conf.d/php-ini-overwrites.ini
  1. 修复webserver的Dockerfile中的APT源问题
    打开webserver/Dockerfile,在执行apt-get install命令前添加更新密钥或允许不安全仓库的命令:

示例Dockerfile修正(基于ubuntu:18.04镜像):

FROM ubuntu:18.04

# 更新APT密钥并刷新源
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 40976EAF437D05B5
RUN apt-get update -y

# 安装所需包(若仍有认证问题,可临时添加--allow-unauthenticated)
RUN apt-get install -y apache2 php libapache2-mod-php --allow-unauthenticated

# 其他构建步骤...

如果使用官方php镜像(如php:7.4-apache),旧版本镜像可能包含过期的Ubuntu源密钥,同样可添加上述密钥更新命令,或直接更换为更新的镜像标签(如php:8.0-apache)。


修正后的完整docker-compose.yml(适配Ubuntu18.04)

version: '3.7'

volumes:
  code:

services:
  webserver:
    build: webserver
    container_name: webserver
    ports:
      - 8080:80
    volumes:
      - ./webserver:/var/www/html
      - ./webserver/php-ini-overwrites.ini:/usr/local/etc/php/conf.d/php-ini-overwrites.ini
  
  database:
    image: mariadb:10.5
    restart: unless-stopped
    container_name: mariadb
    ports:
      - 3306:3306
    environment:
      - MYSQL_USER=user123
      - MYSQL_PASSWORD=password
      - MYSQL_ROOT_PASSWORD=password
    volumes:
      - "./dbdata:/home"
      - "./dbdata/mariadb10:/var/lib/mysql"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:38