我继承了一些用 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 以远程读取数据库凭据也是如此。我还可以尝试让此代码以最少的更改按原样运行吗?
我想到的选项:
.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/