问题

之前利用docker搭PHP+Nginx+MySQL屡试不爽,但在1024这天换了一台服务器,出现了意料之外的问题:

1. 云服务器docker0和eth0网段冲突,致使访问超时

  • 浏览器访问服务器超时TIME_OUT
  • curl localhost:80 和 curl localhost:9000,主机上无响应,在容器内也是Failure to connect,或无响应

2. 已使用的PHP容器中,无MySQLi

  • 报错Uncaught Error: Call to undefined function mysql_connect()

问题1解决:修改Docker网段

经过问题排查,原因为docker0和eth0网卡冲突,皆为172.*.*.*/24段。

  • 于是乎,修改docker0网卡
nano /etc/docker/daemon.json
  • 添加“bip”将docker0改为192.168.*.*段
"bip": "192.168.1.3/24"

在这里插入图片描述
Ctrl+O保存,Ctrl+X退出

  • 重启docker
sudo service docker restart
  • 再次查看 或通过 curl 测试
ifconfig

参考
https://cloud.tencent.com/developer/article/1768097
https://www.zhihu.com/question/278340552/answer/399564710

再记Docker搭建PHP+Nginx+MYSQL简程

cd ~
mkdir -p nginx/www nginx/logs nginx/conf.d
cd ~/nginx/conf.d
nano php7-fpm.conf

这里是使用/www目录,故而编写为fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;

  • http配置
server {
        listen  80;
        server_name     localhost;

        location / {
                root    /usr/share/nginx/html;
                index   index.php index.html index.htm;
        }

        error_page      500 502 503 504 /50x.html;
        location = /50x.html {
                root    /usr/share/nginx/html;
        }

        location ~ \.php$ {
                fastcgi_pass    php:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME /www/$fastcgi_script_name;
                include         fastcgi_params;
        }
}
  • https配置(首先申请SSL证书)
server {
    listen 443 ssl;
    #填写绑定证书的域名
    server_name 【域名】;
    #证书文件名称
    ssl_certificate 【容器内证书的绝对路径】;
    #私钥文件名称
    ssl_certificate_key 【容器内密钥的绝对路径】;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        # 网站主页路径,需按实际目录。
        root /usr/share/nginx/html;
        index index.php index.html index.htm;
    }
    error_page      500 502 503 504 /50x.html;
    location = /50x.html {
        root    /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass    php:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME /www/$fastcgi_script_name;
        include         fastcgi_params;
    }
}
server {
    listen 80;
    #填写绑定证书的域名
    server_name localhost;
    #把http的域名请求转成https
    return 301 https://$host$request_uri;
}

Ctrl+O,Ctrl+X

cd ~/nginx/www
nano index.php
<?
	echo phpinfo();

Ctrl+O,Ctrl+X

cd ~/nginx
sudo chmod 777 -R www

拉取并运行镜像

# PHP
docker run --name  php7-fpm -p 9000:9000 -v ~/nginx/www:/www  -d php:7.4.25-fpm
# Nginx
docker run --name php7-fpm-nginx -p 80:80 -p 443:443 -d \
-v ~/nginx/www/:/usr/share/nginx/html:ro \
-v ~/nginx/conf.d/:/etc/nginx/conf.d:ro \
--link php7-fpm:php nginx
# MYSQL
docker run --name db_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=【密码】 -d mysql

MySQL容器因停止或删除等原因都将导致数据的丢失,需要注意数据需及时与容器分离,并做好备份

参考
https://www.runoob.com/docker/docker-install-php.html

问题2解决:PHP容器内安装MySQLi

# 进入容器
docker exec -it php7-fpm /bin/bash
# 安装
./usr/local/bin/docker-php-ext-install mysqli
# 在/usr/local/etc/php/conf.d目录下,有新的配置文件docker-php-ext-mysqli.ini,查看php配置情况
php --ini
# 若无问题,退出容器
exit
# 重启
docker restart php7-fpm

内容如下PHP文件中,访问应有MySQLi模块。

<?
phpinfo();

PHP的MySQL连接文件的地址采用主机内网地址。

参考
https://blog.csdn.net/ZYF8985957/article/details/106994640

但是,过几天意外发现有挖矿木马在该容器内,故而采取删除措施,抑或创建新容器,且禁止开放9000端口
在这里插入图片描述
在这里插入图片描述
有且在安全组对该ip地址的所有端口服务禁止。
在这里插入图片描述

2022年3月14记录

自21年12月后,3月9日以来,服务器又遇到挖矿木马的问题。
在这里插入图片描述此时在之前基础上,创建新的kdevtmpfsi、kinsing、libsystems.so文件,随意输入内容,放于容器中的/tmp目录下。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐