我已经在n8n容器中安装并构建了我的工作流。
https://docs.n8n.io/getting-started/installation/advanced/server-setup.html
使用docker-compose
,我以非root用户的身份运行容器。
现在,我想在现有的(alpine) docker容器中安装PHP (cli)。
我试过了:
docker run -it n8nio/n8n /bin/ash
/data $ apk update
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied
Install packages in Alpine docker
更多的挖掘和我得到:
docker run -it --user=root n8nio/n8n /bin/ash
/data $ apk update
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied
是否有办法使用docker运行安装PHP在我现有的容器?
如果没有,我是否应该更好地将安装命令添加到docker-compose.yml
文件?
我不想重新创建我的容器,因为我已经做过了。
问题是n8n映像在启动时运行脚本,该脚本以用户node
的身份运行docker run
命令中的任何命令。通过'$'提示符可以看出你不是根用户。如果您是根用户,提示符将是"#"。
节点用户没有运行apk update
所需的权限。
要以root身份运行,需要覆盖映像的入口点,这样它就不会运行脚本。这样的
docker run -it --entrypoint /bin/ash n8nio/n8n
然后你将以root用户运行,可以安装更多的包。
请注意,一旦容器关闭,已安装的包将消失。如果您需要永久安装PHP,您应该制作自己的镜像。
你提到的下一个:
我不想重新创建我的容器,因为我已经在它上面工作过了。
这意味着你不应该再使用docker run
来新建一个容器,你应该使用docker exec
来新建一个已经存在的容器,如下:
$ docker exec -it $id_of_existed_container /bin/ash
/data # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
/data # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
v3.11.12-1-gede026da09 [http://dl-cdn.alpinelinux.org/alpine/v3.11/main]
v3.11.11-124-gf2729ece5a [http://dl-cdn.alpinelinux.org/alpine/v3.11/community]
OK: 11280 distinct packages available