Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑
準(zhǔn)備
創(chuàng)建目錄
mkdir -p /Users/mwqnice/Documents/Program/phpProgram && mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf && mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs && mkdir -p /Users/mwqnice/Documents/Program/docker/nginx/conf.d && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/conf && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/logs && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/data && cd /Users/mwqnice/Documents/Program/docker/nginx/conf.d && sudo touch default.conf
配置PHP
拉取php-fpm鏡像
docker pull php:7.1.33-fpm #版本7.1.33
啟動(dòng)php-fpm
docker run --name mwq-php \ -v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html \ -v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf:/usr/local/etc/php \ -v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs:/phplogs \ -d --link mwq-php php:7.1.33-fpm
--name mwq-php是容器的名字
/Users/mwqnice/Documents/Program/phpProgram是本地項(xiàng)目目錄,/var/www/html是容器內(nèi)項(xiàng)目存儲(chǔ)目錄
配置Nginx
拉取Nginx鏡像
docker pull nginx:latest //拉取最新版本
配置nginx.conf
server {
listen 80;
server_name localhost;
set $root /var/www/html/localhost;
#access_log /tmp/nginx/logs/localhost.net.access.log main;
#error_log /tmp/nginx/logs/localhost.net.error.log notice;
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root $root;
}
location / {
root $root;
index index.php index.html index.htm;
if ( -f $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
location ~ .php(.*)$ {
root $root;
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass mwq-php:9000;
#fastcgi_index index.php;
fastcgi_index index.php?IF_REWRITE=1;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $script;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
location ~ /.svn {
deny all;
}
location ~ /.git/ {
deny all;
}
location ~ /Logs/ {
deny all;
}
location ~ /Logs/.* {
}
location ~ /Logs/.* {
deny all;
}
location ~ .*.(sql|tar.gz|zip|gz|tar|rariso|rpm|apk|bak)$ {
deny all;
}
}
啟動(dòng)Nginx
docker run --name mwq-nginx -p 80:80 -d \ -v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html:ro \ -v /Users/mwqnice/Documents/Program/docker/nginx/conf.d:/etc/nginx/conf.d:ro \ --link mwq-php:php \ nginx
配置MySQL
拉取MySQL鏡像
docker pull mysql:5.7.36 #版本5.7.36
啟動(dòng)MySQL
docker run -p 3306:3306 --name mwq-mysql \ -v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql/conf.d \ -v /Users/mwqnice/Documents/Program/docker/mysql/logs:/logs \ -v /Users/mwqnice/Documents/Program/docker/mysql/data:/mysql_data \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.36
- -p 3306:3306: 將容器的3306端口映射到主機(jī)的3306端口
- -v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql : 將主機(jī)/Users/mwqnice/Documents/Program/docker/mysql/conf目錄掛載到容器的/etc/mysql
- -e MYSQL_ROOT_PASSWORD=123456: 初始化root用戶的密碼
- -d: 后臺(tái)運(yùn)行容器,并返回容器ID
常見(jiàn)問(wèn)題
1、thinkphp報(bào)錯(cuò) Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
缺少pdo_mysql擴(kuò)展,連接數(shù)據(jù)庫(kù)失敗
找到php.ini,docker中在/usr/local/etc/php中,復(fù)制一份php.ini,增加extension=pdo_mysql.so,重啟php-fpm,如果還是不行,訪問(wèn)phpinfo頁(yè)面,查看是否有pdo_mysql

如果沒(méi)有,說(shuō)明沒(méi)有pdo_mysql擴(kuò)展,需要編譯
編譯方法如下:
到docker的php容器中,在php文件夾下:
docker-php-ext-install pdo pdo_mysql
如果報(bào) /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent
解決方案:直接在/usr/local/etc/php目錄下面新建 conf.d目錄和對(duì)應(yīng)的docker-php-ext-pdo_msql.ini文件
其中docker-php-ext-pdo_msql.ini的內(nèi)容為:
extension=pdo_mysql.so
2、thinkphp 報(bào)錯(cuò) STORAGE_WRITE_ERROR:./Application/Runtime/Cache/Home/4e64ea6a2012f26b832b14cbc2152b28.php
是因?yàn)榉?wù)器緩存文件夾的操作權(quán)限不夠,即Runtime沒(méi)有權(quán)限,把緩存文件全部刪除,再給Runtime777權(quán)限就行了
sudo chmod 777 Runtime 或者直接對(duì)代碼庫(kù)最外層設(shè)置777權(quán)限
3、thinkphp驗(yàn)證碼圖片顯示不出來(lái)
缺少gd擴(kuò)展,安裝:
docker-php-ext-install gd
可能以下報(bào)錯(cuò):
If configure fails try --with-webp-dir=<DIR>
If configure fails try --with-jpeg-dir=<DIR>
configure: error: png.h not found.
安裝:
apt-get install libpng-dev libjpeg-dev
再次執(zhí)行:
// 增加freetype配置 docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include // 安裝 docker-php-ext-install gd
php.ini增加php_gd2.so

phpinfo中顯示gd庫(kù)

注意如果phpinfo的gd庫(kù)中沒(méi)有freetype的支持,驗(yàn)證碼依然顯示不出來(lái), 會(huì)報(bào)錯(cuò):
Call to undefined function Think\imagettftext()
如果gd庫(kù)中沒(méi)有freeType,則按照以下步驟進(jìn)行:
docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include
重新編譯:
docker-php-ext-install gd
如果報(bào)錯(cuò): configure: error: freetype-config not found. 運(yùn)行:
apt-get -y install libfreetype6-dev
然后再繼續(xù)運(yùn)行上面的命令。gd庫(kù)中有了freetype,則驗(yàn)證碼顯示正常了
到此這篇關(guān)于Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑 的文章就介紹到這了,更多相關(guān)Docker搭建PHP Nginx Mysq內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解通過(guò)Docker搭建Mysql容器+Tomcat容器連接環(huán)境
- 詳解用Docker搭建外部可以訪問(wèn)的mysql
- 使用Docker容器搭建MySql主從復(fù)制
- Docker搭建MySQL并掛載數(shù)據(jù)的全過(guò)程
- docker 搭建Mysql集群的方法示例
- mysql 5.7 docker 主從復(fù)制架構(gòu)搭建教程
- 使用Docker搭建MySQL數(shù)據(jù)庫(kù)服務(wù)的方法詳解
- 基于Docker的MySQL主從復(fù)制環(huán)境搭建的實(shí)現(xiàn)步驟
- Docker搭建MySQL的實(shí)現(xiàn)示例
相關(guān)文章
使用Docker部署Nginx+Flask+Mongo的應(yīng)用
這篇文章主要介紹了使用Docker部署Nginx+Flask+Mongo的應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
MySQL容器中docker-entrypoint-initdb.d目錄的使用
這篇文章主要介紹了MySQL容器中docker-entrypoint-initdb.d目錄的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
docker?run容器運(yùn)行的方法實(shí)現(xiàn)
本文主要介紹了docker?run容器運(yùn)行的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Dockerfile文件編寫實(shí)戰(zhàn)練習(xí)及注意事項(xiàng)
Dockerfile?是一個(gè)用于構(gòu)建?Docker?鏡像的文本文件,通過(guò)一系列指令來(lái)定義鏡像的構(gòu)建過(guò)程,這篇文章主要介紹了Dockerfile文件編寫實(shí)戰(zhàn)練習(xí)及注意事項(xiàng)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
在Linux系統(tǒng)中安裝Docker的過(guò)程
這篇文章主要介紹了如何在Linux系統(tǒng)中安裝Docker,其實(shí)安裝docker真的很簡(jiǎn)單,只需要幾條命令就可以完成了,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12

