gpt4 book ai didi

php - 在 PHP 5.2.x 中使用 Docker 环境变量

转载 作者:行者123 更新时间:2023-12-02 18:00:39 25 4
gpt4 key购买 nike

我继承了一些用 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"
文件
FROM devilbox/php-fpm:5.2-base
EXPOSE 9000
CMD ["php-fpm"]
使用 phpinfo()$_ENV 中没有显示这些值或 $_SERVER , 和 getenv()返回空字符串。

我看过最新的 php-fpm相关问题说这是用 clear_env: no 解决的, but this is only available in PHP-FPM 5.4+
我曾尝试使用 composer安装 dotenv ,但这似乎需要 PHP7。尝试安装 Vault 以远程读取数据库凭据也是如此。

我还可以尝试让此代码以最少的更改按原样运行吗?
我想到的选项:
  • 启动一个公开预配置环境的辅助 REST 服务器,然后从 PHP 请求该服务器......看起来很笨拙,但比任何代码中的硬编码数据库凭证都要好,并且会获得与使用 Vault 类似的结果。
  • 挂载我的 .env文件,然后解析它,但这需要更多的代码更改,无论如何以后都会删除
  • 最佳答案

    很可能那些 env 在您正在使用的图像中的某处被覆盖。
    docker compose 允许定义一个在启动时运行的命令。因此,您可以在启动时将 env vars 覆盖为您需要的任何内容:

    command: bash -c "DB_HOST='mariadb:3306' && DB_USER='some_user ... & ./start_something.sh"
    编辑:
    正如评论中提到的,php 要求所有 env 都在 php-fpm.conf 中.对我来说很奇怪,但是通过在同一个 command: 中将您需要的环境变量添加到此文件中来解决这个问题很容易。 docker compose 的声明。简单 echo "ENV_NAME" >> ..../php-fpm.conf应该可以帮助你。
    或者您可以修改 Dockerfile 以便您的图像具有简单的 sh 脚本,该脚本会将所有环境变量转储到该 php 配置中。
    我正在修改 mongo 配置,以便作为副本集工作 - 就像一个魅力。

    关于php - 在 PHP 5.2.x 中使用 Docker 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63040892/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com