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

Dockerfile中ubuntu:latest被忽略,容器用Debian,如何获取最新系统?

问题:Docker容器未使用Ubuntu系统的原因及解决方法

我想要创建一个PHP/Apache Docker容器,编写了如下的Dockerfile和docker-compose.yaml文件:

Dockerfile

FROM ubuntu:latest
FROM php:5.4-apache
RUN a2enmod ssl && a2enmod rewrite
RUN apt-get update && apt-get upgrade -y  --allow-unauthenticated
RUN apt-get install software-properties-common -y --force-yes
RUN apt-get update
RUN apt-get install git libonig-dev libxml2-dev sqlite3 libsqlite3-dev curl libzip-dev libcurl4-openssl-dev zip unzip jq libldap2-dev net-tools libpng-dev -y --force-yes
RUN docker-php-ext-install mysql mysqli gd
RUN apt-get update
EXPOSE 80
EXPOSE 443

docker-compose.yaml

version: '3.3'
services:
  wawi_web_production:
    container_name: wawi_web_production
    build:
      context: ./apache
      dockerfile: Dockerfile
    volumes:
      - ./app:/var/www/html/
      - ./apache/wawi.conf:/etc/apache2/sites-available/000-default.conf
    ports:
      - '8000:80'
      - '8080:443'

执行命令docker-compose up --build -d --force-recreate构建并启动容器后,进入容器执行lsb_release -a查看操作系统,结果显示为:

root@containerid:/var/www/html# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.11 (jessie)
Release:        8.11
Codename:       jessie
root@containerid:/var/www/html# 

我期望容器使用最新版Ubuntu系统,请问我哪里操作错误?


问题原因

你Dockerfile里的多FROM指令是核心问题:Docker在构建镜像时,只会把最后一个FROM指令指定的镜像作为最终镜像的基础,前面的FROM ubuntu:latest会被完全忽略。而php:5.4-apache这个官方镜像的基础系统是Debian 8 Jessie,所以容器启动后显示的是Debian系统。

解决办法

方案1:基于Ubuntu手动构建(适配PHP5.4)

由于PHP5.4已经是非常老旧的版本,新版Ubuntu(20.04及以上)的官方源里已经没有这个版本的包,只能选择停止支持的旧版Ubuntu(比如14.04)来构建,示例Dockerfile如下:

FROM ubuntu:14.04
# 更新源并安装基础依赖
RUN apt-get update && apt-get upgrade -y
# 安装Apache和PHP5.4相关组件
RUN apt-get install -y apache2 php5 php5-mysql php5-gd libapache2-mod-php5
# 启用需要的Apache模块
RUN a2enmod ssl && a2enmod rewrite
# 安装你需要的其他工具和依赖
RUN apt-get install -y git libxml2-dev sqlite3 libsqlite3-dev curl zip unzip jq libldap2-dev net-tools libpng-dev
# 暴露端口
EXPOSE 80 443

注意:Ubuntu 14.04已经停止官方支持,存在安全风险,如果业务允许,建议优先升级PHP版本。

方案2:升级PHP版本,使用基于Ubuntu的官方PHP镜像

如果可以升级PHP到7.4及以上的支持版本,可以选择官方提供的基于Ubuntu的PHP-Apache镜像,比如php:8.2-apache-22.04(基于Ubuntu 22.04),修改后的Dockerfile示例:

FROM php:8.2-apache-22.04
# 启用Apache模块
RUN a2enmod ssl && a2enmod rewrite
# 安装依赖和PHP扩展
RUN apt-get update && apt-get install -y git libonig-dev libxml2-dev sqlite3 libsqlite3-dev curl libzip-dev libcurl4-openssl-dev zip unzip jq libldap2-dev net-tools libpng-dev
RUN docker-php-ext-install mysqli gd pdo_mysql zip
# 暴露端口
EXPOSE 80 443

这种方式既可以使用Ubuntu系统,又能获得官方维护的PHP和Apache环境,安全性和稳定性更有保障。


内容的提问来源于stack exchange,提问作者Doğan Uçar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:15:22