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

Dockerfile中TNS_ADMIN环境变量部署至Kubernetes后丢失求助

镜像部署Kubernetes后TNS_ADMIN环境变量丢失问题排查

背景

长期以来,我们通过以下Dockerfile在本地构建支持Oracle数据库的PHP-FPM基础容器镜像:

ARG PHP_VERSION=7.4
ARG PHP_TYPE=fpm

FROM php:${PHP_VERSION}-${PHP_TYPE}

ENV LD_LIBRARY_PATH /usr/local/instantclient
ENV ORACLE_BASE     /usr/local/instantclient
ENV ORACLE_HOME     /usr/local/instantclient
ENV TNS_ADMIN       /etc/oracle

COPY oracle /etc/oracle

RUN echo 'instantclient,/usr/local/instantclient' | pecl install oci8-${OCI8_VERSION} \
    && docker-php-ext-configure oci8 --with-oci8=instantclient,/usr/local/instantclient \
    && docker-php-ext-install oci8 \
    && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/local/instantclient \
    && docker-php-ext-install pdo_oci \
    && rm -rf /tmp/pear

基于该镜像构建的应用镜像部署至Kubernetes集群后,TNS_ADMIN环境变量一直正常存在。

近期我们做了两处变更:

  1. 构建方式改用Kaniko+GitLab CI替代本地构建
  2. Oracle组件安装方式改用专用的PHP扩展安装脚本
    相关Dockerfile代码如下:
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions oci8 pdo_oci

# Oracle client config
ENV TNS_ADMIN=/etc/oracle
COPY php.cli/oracle /etc/oracle

GitLab CI中Kaniko构建应用镜像的相关代码(仅$PHP_TYPE与当前镜像相关):

- |
      LOCAL_REPOSITORY=${CI_REGISTRY}/<internal namespace path>/$REPOSITORY
      # Build config.json for credentials
      echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
      /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/$DOCKER_FILE_PATH/Dockerfile --build-arg PHP_VERSION=$PHP_VERSION --build-arg PHP_TYPE=$PHP_TYPE --build-arg PHPUNIT_VERSION=$PHPUNIT_VERSION --build-arg PHPCS_VERSION=$PHPCS_VERSION --build-arg PHPCSFIXER_VERSION=$PHPCSFIXER_VERSION --destination $LOCAL_REPOSITORY:$PHP_VERSION-$TAG_NAME

问题现象

  • 将构建后的镜像本地拉取并运行bash时,TNS_ADMIN变量正常存在,排除镜像构建层面的问题
  • 但通过Helm将镜像部署至Kubernetes集群后,TNS_ADMIN环境变量丢失
  • Helm部署流程及Chart未做任何修改,表面上的变更不应导致此类问题

排查方向请求

请问是否有类似问题的排查经验,或能提供可行的排查方向?

内容的提问来源于stack exchange,提问作者Bryan Powell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:45:29