亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 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 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號