docker部署nginx+php的介紹很多,我也是安裝上面的來部署,發現各種坑,在這給列舉下,供大家參考。
1、安裝好docker的nignx 和php
2、修改nginx.conf配置,加上php解析
其中
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_rootdocumentrootfastcgi_script_name;
fastcgi_pass 172.17.0.3:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
出現502 gateway錯誤
這里的fastcgi_pass要是phprpm容器的內網ip地址,而不是127.0.0.1
出現404 file not found
其實nginx版本不通,document_root高版本已不支持,寫成絕對路徑,但大部署介紹寫的是宿主機路徑,這是錯的。要寫成phpfpm容器內的路徑,如:/var/www/html
還有我在安裝phpfpm時掛載文件時-v宿主機要寫到:后面
還碰到進容器后無權限,要在-v掛載后加–privileged=true
有的說要去修改phpfpm的配置文件把listen 127.0.0.1改成0.0.0.0這是不需要的
以上應該就能訪問通了
如果部署的時候有權限不足
那要把宿主機對應的html文件夾設置成777
有的需要php特殊插件
phpfrm內有docker-php-ext-install命令
進入phpfrm容器內執行即可,如擴展mysql執行 docker-php-ext-install pdo pdo_mysql
如果ext里面沒有還可以用如下的
apt update #更新軟件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安裝各種庫
docker-php-source extract #解壓源碼
cd /usr/src/php/ext/gd #gd源碼文件夾
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准備編譯
docker-php-ext-install gd #編譯安裝
php -m | grep gd
在所有環境都成功部署好后,有的在運行應用時,會出現"Primary script unknown"錯誤,一般這是由於nginx和php-fpm的用戶不同導致的。把nginx.conf和php-fpm.d/www.conf 的user設為同一個就可以了。