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

Docker构建Laravel镜像时仍使用旧docker-compose环境变量求助

问题描述

我是Docker新手,在为Laravel应用搭建Docker环境时遇到异常:最初用带环境变量的docker-compose.yml配置,之后删除该文件改用单一Dockerfile构建。测试时复制了.env文件,但构建/运行时并未使用.env里的值,反而沿用docker-compose中设置的旧环境变量,即使删除docker-compose.yml后问题仍存在。

已尝试以下操作但无效:

  • 删除所有容器(包括离线容器)
  • 删除所有镜像
  • 执行docker builder prune -a
  • 使用docker build --no-cache构建

附我的Dockerfile:

FROM ubuntu:20.04

ENV HOME /root
ENV LC_ALL          C.UTF-8
ENV LANG            en_US.UTF-8
ENV LANGUAGE        en_US.UTF-8

RUN apt-get update -y

RUN apt-get install software-properties-common -y

RUN add-apt-repository ppa:ondrej/php  && \
        apt-get update -y

RUN apt-get -y install php8.1 php-mysql php-curl php-mcrypt php-cli php-dev php-pear libsasl2-dev

RUN mkdir -p /usr/local/openssl/include/openssl/ && \
    ln -s /usr/include/openssl/evp.h /usr/local/openssl/include/openssl/evp.h && \
    mkdir -p /usr/local/openssl/lib/ && \
    ln -s /usr/lib/x86_64-linux-gnu/libssl.a /usr/local/openssl/lib/libssl.a && \
    ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/local/openssl/lib/

RUN pecl install mongodb

RUN echo "extension=mongodb.so" > /etc/php/8.1/cli/conf.d/20-mongodb.ini && \
    echo "extension=mongodb.so" > /etc/php/8.1/mods-available/mongodb.ini && \
    echo "extension=mongodb.so" > /etc/php/8.1/cli/php.ini

RUN mkdir -p /usr/src/app

ENV PORT 8000

EXPOSE 8000

WORKDIR /usr/src/app

RUN apt-get install wget php-zip unzip -y

RUN wget -O composer-setup.php https://getcomposer.org/installer

RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer

COPY . /usr/src/app

RUN composer install

RUN php artisan fix:passport

RUN php artisan migrate

RUN php artisan passport:install

CMD ["php", "artisan", "serve"]
排查思路
  • 检查.dockerignore配置:确认项目根目录的.dockerignore没有忽略.env文件,否则COPY . /usr/src/app会跳过该文件,容器内无法读取到新的.env值。
  • 验证容器内.env文件状态:启动容器后执行docker exec -it <容器ID> cat /usr/src/app/.env,对比容器内和本地的.env内容是否一致,排查复制步骤是否生效。
  • 检查容器启动命令:确认运行容器时没有通过docker run -e参数手动传递旧环境变量,这类参数会覆盖容器内.env的配置。
  • 清除Laravel配置缓存:进入容器执行php artisan config:clear,Laravel可能缓存了旧的配置值,导致新.env无法生效。可通过php artisan tinker执行env('<变量名>')验证读取结果。
  • 清理构建上下文环境:构建前检查本地系统环境变量是否存在旧值,执行unset <旧环境变量名>清除后再重新构建——构建过程中composer install、php artisan等命令会读取本地环境变量,可能带入旧值。
  • 测试干净构建上下文:将项目文件(含新.env)复制到一个空的临时目录,在该目录下重新执行构建,排除原目录中残留的旧配置文件干扰。

内容的提问来源于stack exchange,提问作者Santiago Paradelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28