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配置无法生效。
解决方法
- 修正docker-compose.yml中的路径错误
将webserver的volumes配置里的conf.de改为conf.d:
- ./webserver/php-ini-overwrites.ini:/usr/local/etc/php/conf.d/php-ini-overwrites.ini
- 修复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
相关产品推荐
相关产品推荐

