从 Docker 容器向 php 添加扩展
Adding extensions to php from a Docker container
我正在使用 Arch Linux os。
我有一个容器 运行 一个 php 项目,我需要启用 gmp 和 curl 扩展。
我的容器基于 Alpine 镜像,我可以使用 docker exec {container-name} apk add php-gmp php-curl
.
安装扩展
然后如果我 运行 docker exec {container-name} php -m
显示我的扩展,控制台打印 gmp
和 curl
。很好,这一切都很好,我还在同一容器内的 php.ini 文件 运行ning 中启用了扩展。
但是如果我去一个控制器并且 return extension_loaded('gmp')
它打印 false!
我错过了什么?
向 Jon Stirling 大喊他的回答。
我需要重新编辑 Dockerfile 以包含 gmp
和 curl
包,然后还有 Dockerfile 编辑 php.ini 配置文件以包含 gmp
和 curl
扩展。
所以:
RUN apk add --no-cache \
...{all my other packages}...
php-gpm \
php-curl
RUN sed -i 's/extension=gmp.$/extension=gmp/;s/extension=curl.$/extension=curl/;' /etc/php7/php.ini
最后一行使用终端工具 'sed -i' 替换匹配 extension=gmp
和 extension=curl
的任何行,并替换它们所在的整行。
这基本上取消了 php.ini 文件中的注释,而无需复制一个全新的 php.ini 目录中的文件。
使用 docker-compose build
重建整个项目然后重新启动所有内容后 extension_loaded('gmp')
返回 true
!
我正在使用 Arch Linux os。
我有一个容器 运行 一个 php 项目,我需要启用 gmp 和 curl 扩展。
我的容器基于 Alpine 镜像,我可以使用 docker exec {container-name} apk add php-gmp php-curl
.
然后如果我 运行 docker exec {container-name} php -m
显示我的扩展,控制台打印 gmp
和 curl
。很好,这一切都很好,我还在同一容器内的 php.ini 文件 运行ning 中启用了扩展。
但是如果我去一个控制器并且 return extension_loaded('gmp')
它打印 false!
我错过了什么?
向 Jon Stirling 大喊他的回答。
我需要重新编辑 Dockerfile 以包含 gmp
和 curl
包,然后还有 Dockerfile 编辑 php.ini 配置文件以包含 gmp
和 curl
扩展。
所以:
RUN apk add --no-cache \
...{all my other packages}...
php-gpm \
php-curl
RUN sed -i 's/extension=gmp.$/extension=gmp/;s/extension=curl.$/extension=curl/;' /etc/php7/php.ini
最后一行使用终端工具 'sed -i' 替换匹配 extension=gmp
和 extension=curl
的任何行,并替换它们所在的整行。
这基本上取消了 php.ini 文件中的注释,而无需复制一个全新的 php.ini 目录中的文件。
使用 docker-compose build
重建整个项目然后重新启动所有内容后 extension_loaded('gmp')
返回 true
!