如何在现有的Alpine docker容器中安装php ?

  • 本文关键字:安装 php docker Alpine docker
  • 更新时间 :
  • 英文 :


我已经在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

相关内容

  • 没有找到相关文章