WHY
最近开始学习laravel,对要求php8以上,正好趁此机会,也了解下php8
因为本地docker之前有过nginx、php7.5的镜像容器在运行,最初打算新起个php8的docker容器,然后和现有nginx走同一个network,通过不同的name来区分指定(之前php7name为php,这个打算name为php8),然后nginx配置做转发时,根据对于对应的name来区分。。
理想很美,但按照这样的逻辑来实现一直未成功。希望有解决办法的朋友们能够在评论里分享出来
中间通过指定端口来启动php8容器,也未能实现上面的目的....
那么只能,
新起nginx容器+php8容器走一个独立的network
HOW
notice: 对应使用的镜像需自行先下载
我的laravel项目代码位置: ~/dev/wanghaokun/laravelTest
create network
docker network create -d bridge nginxphp8
create php container
docker run --name php8 --net nginxphp8 --network-alias php8 --restart=on-failure:10 -v /Users/wanghaokun/dev:/www/code -d wohaokun/php8:1.0
create nginx container
docker run --name nginxphp8 -p 9084:9084 -d -v /Users/wanghaokun/dev:/www/code --net nginxphp8 --restart=on-failure:10 wohaokun/nginxphp8:1.0
WHAT
访问效果
附:
nginx laravel 配置
之前一直想把代码及日志目录挂到/dev目录下,发现每次容器重启和commit提交镜像,里面修改的内容均不会被保存,故将数据统一放到了新建的 /www 目录下。
server {
listen 9084;
# listen [::]:80;
# server_name example.com;
root /www/code/wanghaokun/laravelTest/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
access_log /www/logs/laravelTest-api-access.log main;
error_log /www/logs/laravelTest-api-error.log;
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass php8:9000;
# fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}