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环境变量一直正常存在。
近期我们做了两处变更:
- 构建方式改用Kaniko+GitLab CI替代本地构建
- 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
相关产品推荐
相关产品推荐

