by Devin Yang

建立于: 4年前 ( 更新: 4年前 )

这是我在自己的Nas上手动变更fpm owner的全日志。

一、首先下载我要使用的最新image,本文中7.4.13是我想使用的新版本php。
docker pull deviny/fpm:7.4.13
实际画面如下:


二、进入D-Laravel的目录,并修改docker-compose.yml的php服务采用最新的php(deviny/fpm:7.4.13)版。
cd /volume1/docker/dlaravel
vi docker-compose.yml

操作画面(我使用vi编辑器):


三、在yaml档中,修改容器服务php的段落,调整到刚下载的fpm版本。
### PHP-FPM container ##################################
 php:
  image: deviny/fpm:7.4.13
  volumes:
实际画面如下:



四、存档后离开,进行容器重启,这时就是跑新版本的php罗。
可以用docker-compose移除再启动,或是D-Laravel提供的bash进行。
./console restart
#我们也能使用docker-compose命令重启,结果等同於上方的命令,意思一样的:
#docker-compose down --remove-orphans
#docker-compose up -d
重启完成后,我们运行命令查看。会看到容器运行的使用者是1000,这是D-Laravel默认的使用者uid。
为何要换掉他,因为我是用NAS上的admin帐号运行的,这会造成php无权限写容器数据夹,所以我要换成与admin相同的uid (1024)。
admin@CCC:/volume1/docker/dlaravel$ docker-compose exec php id
uid=1000(dlaravel) gid=1000(dlaravel) groups=1000(dlaravel)

五、如何查询自己的uid是什么呢,运行id即可。
admin@CCC:/volume1/docker/dlaravel$ id
uid=1024(admin) gid=100(users) groups=100(users),0(root),101(administrators)
实际操作画面:

或者,我想变更其他使用者的uid,也能用id命令查询。
admin@CCC:/volume1$ id -u devin
1027
像上方显示,devin的uid是1027。

六、调整etc/php-fpm.d/www.conf权限
user = 1024
group = 100
我的文件内容,抓图如下:


七、在开始调整容器uid前,我们可以再一次确认,容器php服务是启动中的。
./console ps
#或者,也可用docker-compose查php/fpm权限是否启动。
docker-compose ps php
实际操作运行画面:


也能用docker-compose的命令查看,port 9000即是php fpm的服务罗,状态为Up代表著容器运作中。
不运作我们怎么变更容器内的权限是吧? :)


八、重头戏来了,因为容器是Up的,所以我们就能在host端,运行容器内的命令,下命令调整容器内的使用者uid、gid及家目录的权限啦,命令如下:
#容器中使用者的uid
docker-compose exec -uroot php usermod -u 1024 dlaravel
#容器中使用者的gid
docker-compose exec -uroot php usermod -g 100 dlaravel
#容器中目录权限
docker-compose exec -uroot php chown -R 1024 /home/dlaravel
在上方的命令中,1024是我的admin的uid,您应依据你想变更的uid进行调整。

九、完成调整后,记得保存(commint)我们变更的容器,我们可以透过下方命令取得运作中的容器id。
docker ps|grep php
#或是docker-compose命令
docker-compose exec php hostname
取得容器id可以用D-Laravel提供的./console命令,也可以用dockr-compose,运行的结果是相同的。
在下方的实际运行画面中,我故意用./console跟docker-compose各运行一次。


十、接续上个步骤,我的容器id是47fcd589fc2b,这里我自已定了一个新名称admin/fpm:7.4.13。
运行下方命令后,就能创建一个新的image,并且内容是我们调整过uid及gid的image罗。
docker commit 47fcd589fc2b admin/fpm:7.4.13


十一、完成后,记得修改我们自己的docker-compose.yml使用修改后的image。


十二、变更完新版本的image后,重启并验证容器内的uid是否变更了。
#重启
./console restart
#进入容器内
./console
#检查容器使用者id
id

十三、您看看,容器中的dlaravel uid已由1000变更为我们指定的1024罗:)。


备注,您容器中的/tmp目录,会保存了旧的PHP SESSION,您需要用root的身份登录容器中,清空再commit一次容器。
这些旧的session是uid 1000会造成新的admin权限为1024没法写变更,所以需要清掉旧的session,如果在调整过程中已有使用者登录了网站。

一、使用root的身份登录php的容器
admin@CCC:/volume1/docker/dlaravel$ docker-compose exec -uroot php bash
root@0d7682041752:/var/www/html#
二、清除/tmp下,所有uid为1000的文件,因为在这里我新的uid是1024了,不是默认的1000啦。
find /tmp -uid 1000 -name sess* -exec rm -f {} \;

#或者不希望任何session被commit,无差别清除,直接全清行,所有使用者会被注销,反正也想重启容器啦:)。
rm -rf /tmp/sess*

三、运行完调整后,记得再commit一次变更的版本。


我们可以随传弄个文件到public的目录上测看看 实际操作画面:


开开网页来看看,是1024非原来的100了。


 

Tags: docker container laravel

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


laravel

在Laravel 5.5,好用的基本路由

特别对於有在研究SEO的朋友应该会知道,有时我们会需要进行301页面重导,在Laravel 5.5提供了 相当简易的Route::redirect的功能了,另外使用Route::view对於静态页面的套版也相当有用。

d-laravel,docker

D-Laravel v1.2.1版变更说明(建议更新,必免踩雷)

D-Laravel v1.2.1版修正说明 use GuzzleHttp\Client; 进行post时.出现访问被拒的问题。 如果您是由旧版升级,您可能需调整etc/default-ssl.conf的设置档 (如果有该档) 请调整php:9000变更为web:9000,你可以透过运行一次./console secure调整。 docker-compose设置档部份,PHP-FPM container变更为network_mode: "service:web"...

laravel

奔跑吧Laravel

如果您还没听过D-Laravel,容我介绍一下,D-Laravel为采用docker-compose所创建的Laravel与docker运行环境, 透过简单的bash让我们快速生成Laravel的项目。 本文教您如何使用D-Laravel的提供的docker image,来创建swoole的运行开发环境。 看完这篇,您应该能快速的透过D-Laravel创建出swoole的运行环境罗。