为了账号安全,请及时绑定邮箱和手机立即绑定

将 Docker 环境变量与 PHP 5.2.x 结合使用

将 Docker 环境变量与 PHP 5.2.x 结合使用

PHP
叮当猫咪 2023-08-19 16:14:08
我继承了一些用 PHP 5.2编写的代码,我没有自己安装,而是让它在 Docker 容器中运行。该系统还依赖于 MySQL,因此使用 Docker Compose 并将数据库凭据提取到更安全的位置......version: "3"services:    mariadb:        image: mariadb:10.5        environment:            MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}            MYSQL_USER: ${DB_USER}            MYSQL_PASSWORD: ${DB_PASSWORD}            MYSQL_DATABASE: ${DB_DATABASE}        volumes:            - ./conf/mariadb/initdb.d:/docker-entrypoint-initdb.d/:ro        ports:            - "3306:3306"    nginx:        image: nginx:alpine        depends_on:             - php-fpm        volumes:            - ${LOCAL_WORKING_DIR}:${REMOTE_WORKING_DIR}            - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf            - ./conf/nginx/conf.d/:/etc/nginx/conf.d/            # - ./conf/nginx/ssl/:/etc/nginx/ssl/        ports:            - "8080:80"            # - "8443:443"    php-fpm:        build:             context: docker/app            args:                APP_ENV: ${APP_ENV}                PHP_VERSION: ${PHP_VERSION}                REMOTE_WORKING_DIR: ${REMOTE_WORKING_DIR}        depends_on:             - mariadb        working_dir: ${REMOTE_WORKING_DIR}        volumes:            - ${LOCAL_WORKING_DIR}:${REMOTE_WORKING_DIR}            - ./conf/php/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro            # - ./conf/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini:ro            - ./conf/php/php-ini-overrides.ini:/usr/local/etc/php/conf.d/99-overrides.ini:ro        environment:             DB_HOST: mariadb:3306            DB_USER: ${DB_USER}            DB_PASSWORD: ${DB_PASSWORD}             DB_DATABASE: ${DB_DATABASE}        ports:            - "9000:9000"使用不会显示或phpinfo()中的任何值,并返回空字符串。$_ENV$_SERVERgetenv()我看到最新的php-fpm相关问题说这可以通过 解决clear_env: no,但这仅在 PHP-FPM 5.4+ 中可用我尝试使用composer安装dotenv,但这似乎需要 PHP7。尝试安装 Vault 以远程读取数据库凭据也是如此。我还可以尝试什么让此代码以最小的更改按原样运行?我想到的选项:启动一个公开预配置环境的辅助 REST 服务器,然后从 PHP 请求该服务器...看起来很 hacky,但比在任何代码中硬编码数据库信用要好,并且会获得与使用 Vault 类似的结果。挂载我的.env文件,然后解析它,但这需要更多的代码更改,无论如何,这些更改稍后都会被删除
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

我在其中找到了一个包含环境变量的 XML 文件/usr/local/etc/php-fpm.conf,并使用它填充了它dockerize

<value name="environment">

    <!-- Add docker environment variables -->

    {{ range $k,$v := .Env }}{{ $parts := split $k "APP_" }}{{ if eq (len $parts) 2 -}}

    <value name="{{ index $parts 1 }}">{{ $v }}</value>

    {{ end }}{{- end -}}

    <!-- End Docker Env -->

随着 docker-compose 有


environment:

    APP_DB_HOST: mariadb:3306

    APP_DB_USER: ${DB_USER}

    APP_DB_PASSWORD: ${DB_PASSWORD} 

    APP_DB_DATABASE: ${DB_DATABASE}

https://img3.sycdn.imooc.com/64e07a0900016b3d05900300.jpg

查看完整回答
反对 回复 2023-08-19
?
UYOU

TA贡献1878条经验 获得超4个赞

最有可能的是这些环境在您正在使用的图像中的某个地方被覆盖。docker compose 允许定义启动时运行的命令。因此,您可以在启动时将环境变量覆盖为您需要的任何内容:

command: bash -c "DB_HOST='mariadb:3306' && DB_USER='some_user ... & ./start_something.sh"

编辑:

正如评论提到的,php 要求所有环境都位于php-fpm.confcommand:对我来说很奇怪,但通过在docker compose 的同一语句中将所需的环境变量添加到此文件中,很容易解决问题。简单echo "ENV_NAME" >> ..../php-fpm.conf应该对你有帮助。

或者您可以修改 Dockerfile,以便您的映像具有简单的 sh 脚本,该脚本会将所有环境变量转储到该 php 配置中。

我正在修改 mongo 配置,以便作为副本集工作 - 就像魅力一样。


查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号