Linux安装DockerPHP
1.前言
我尝试使用 Docker 安装 php,我尝试了很多的方式,都没有效果,最后php7-3-容器安装SQL-Server-扩展 这篇文章才弄完了这个东西。
- RockyLinux 9
- Docker 20.1
- php:7.3.7-fpm
- ODBC
- pdo_sqlsrv
- pdo_mysql
2.目录
1 | -- docker-compose.yml |
3.sqlserver_extension.sh
1 | # sqlserver |
【1】.容器内安装 容器中新增Microsoft ODBC Driver for SQL Server 驱动 Debian 9、Debian 10、Debian 8
4.Dockerfile
1 | FROM php:7.3.7-fpm |
5.dockeer-compose.yml
1 | version : '3.8' |
6.修改配置
先把配置文件拷出来,然后修改其中的内容。
1 | # copy 配置 php.ini 文件 |
(1) 修改 openssl.cnf 文件,为了解决 08001 问题,需要修改容器内的 /etc/ssl/openssl.cnf 文件
1 | [system_default_sect] |
(2) 修改 php.ini
1 | # 原 |
【1】.request ssl_choose_client_version:unsupported protocol 这里有解决问题的办法。
7.启动
1 | # 后台启动 |
问题
1.404问题
安装上面的docker配置之后,可以启动php容器,也可以正确的监听 9000 端口,但是在本机配置ningx之后,指向容器的 9000 端口,总是出现404错误。
1 | location ~ \.php$ { |
我尝试修改了 nginx 里面的路径映射,修改了 docker php 配置,好像还是不起作用。
【解决方案】
解决Docker中部署PHP-FPM出现”File not found.”的问题 这里和我的情况差不多,就是本机的nginx,docker中的php,这里说了配置了两个地方,一个就是nginx里面的东西,将 $document_root 改为了 /var/www/html,docker-compose.yml 配置 opt/myapp/html:/var/www/html。这里问题就是关于nginx配置和映射的问题,这个我尝试了很久,最后还是因为域名的问题,就是我修改的配置是另外一个,但是我访问的不是这个目录。
- nginx 中的 $document_root 要换成 /var/www/html,fastcgi_param SCRIPT_FILENAME /var/www/htmlfastcgi_script_name;
- docker-compose.yml 中的 volumes 要将本地路径映射到 /var/www/html
【1】.docker如何一键部署php项目教程
【2】.使用docker部署访问php项目
【3】.Docker 安装 PHP /Users/sui/www 是本地 php 文件的存储目录,/var/www/html 是容器内 php 文件的存储目录
【4】.Dockerfile基于镜像php:7.2-fpm构建自定义php7.2镜像
【5】.Docker + Nginx + PHP 访问403,404问题
【6】.php安装过程遇到的坑 解决思路:第一步:首先看一下是不是权限的问题;第二步:检查nginx配置,修改配置。
【7】.docker部署nginx+php的 各种坑 修改nginx.conf配置,加上php解析:这里的fastcgi_pass要是phprpm容器的内网ip地址,而不是127.0.0.1,其实nginx版本不通,document_root高版本已不支持,写成绝对路径,但大部署介绍写的是宿主机路径,这是错的。要写成phpfpm容器内的路径,如:/var/www/html
【8】.docker 搭建环境出现 FastCGI sent in stderr: “Primary script unknown” 在安装好 Nginx 并配置好根目录之后,采用了默认的 SCRIPT_FILENAME 配置参数,这样的话 FastCGI 无法定位到正确目录解析 php 文件,$document_root 表示 root 指定的目录,针对 /home/web 目录下的 php 文件进行解析。Nginx 用户与 Php-fpm 用户不一致
如果以上配置都为正确的情况下,将 nginx.conf 中的 user 用户配置与 www.conf 用户配置设置为统一的用户与用户组。
2.方式一
使用Docker安装配置php环境,我准备尝试一下。
1 | ROM php:7.1-fpm-jessie |
【1】.PHP7连接访问SqlServer及开发环境搭建 这里也有一个dockerfile,但是我没有运行成功。
3.方式二
1 | FROM php:7.2.11-fpm |
【1】.Example of PHP 7.2.x Docker image install with MS SQL Server extensions php和mysql的dockerfile文件配置示例。这里还有安装 odbc 的dockerfile文件,这是上面的代码。
【2】.php容器中(docker)新增sqlserver扩展 本人容器操作系统版本是 Debian 10,根据个人实际操作系统找到对应操作系统对应版本按指示安装执行即可,vim /etc/ssl/openssl.cnf,我选择了将MinProcotol修改为TLSv1。
4.方式三
1 | FROM php:7.2.11-fpm-jessie |
php7-3-容器安装SQL-Server-扩展 这里分了两步,安装了
1 | FROM php:7.3.7-fpm |
【1】.php容器中(docker)新增sqlserver扩展 本人容器操作系统版本是 Debian 10,根据个人实际操作系统找到对应操作系统对应版本按指示安装执行即可
【2】.PHP安装sqlserver,为PHP docker映像安装/配置SQL Server PDO驱动程序
【3】.容器内安装 容器中新增Microsoft ODBC Driver for SQL Server 驱动
【4】.apt-get update failed to fetch debian amd64 packages while building dockerfile from maven:3.5.2-jdk-8 To update your repository configuration, change deb.debian.org to archive.debian.org in lines referencing Stretch in /etc/apt/sources.list and files in /etc/apt/sources.list.d
【6】.通过docker自定义安装php7.x并且安装源码扩展、pecl扩展、及其他扩展 php:7.2.4-fpm,docker中php扩展安装方式:1、PHP源码文件目录自带扩展 docker-php-ext-install直接安装;2、pecl扩展 因为一些扩展不包含在PHP源码文件中,PHP 的扩展库仓库中存在。用 pecl install 安装扩展,再用 docker-php-ext-enable 命令 启用扩展;3、其他扩展 一些既不在 PHP 源码包,也不再 PECL 扩展仓库中的扩展,可以通过下载扩展程序源码,编译安装的方式安装
【7】.【已解决】执行apt-get update报错404 Not Found的解决方案——docker 镜像下安装报错 这个错误表明你使用的操作系统版本,即 Debian 8 (jessie) 已经停止支持并已归档,因此官方软件源已经关闭。所以更新操作系统包列表时就会遇到 404 错误。如果要继续使用这个操作系统版本,你需要使用归档的 Debian 镜像源来更新包列表。
你可以在 /etc/apt/sources.list 文件中添加以下内容,指定归档源地址(直接执行一下命令即可)
【8】.docker执行apt-get update报错 Err http://security.debian.org jessie/updates/main amd64 Packages 可以看到404了,所以就是debian源地址改了,修改源,我们修改debian源地址,这里使用清华的debian源
【9】.如何在dockerfile中将apt-get源更换为中国国内源 这将使用 sed 命令替换默认的 Ubuntu 源为阿里云镜像。如果您使用的是 Debian 发行版,则可以使用以下命令替换默认源为中科大的镜像。
5.方式四
1 | RUN docker-php-source extract && cd /tmp \ |
6.session_start(): Cannot start session when headers already sent in
在执行 php 的时候,出现了这个问题。
【尝试问题】
1 | docker cp koko:/tmp/test.db ./data/test.db |
【解决方案】
找到 php.ini 配置文件,session.auto_start,将其后面的0置为1,然后重启apache,就解决了!
【1】.session_start(): Cannot start session when headers already sent in 打开php.in配置文件,并改写其中内容(这里不推荐在记事本中操作此文件)
【2】.快速修改PHP镜像中的php.ini并生效 - wuuconix’s blog 进入后php –ini