在docker情况下启动php的注意事项-docker完整挂载php目录、在Docker查看容 ...

打印 上一主题 下一主题

主题 998|帖子 998|积分 2994

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、在docker情况下启动php的注意事项-docker完整挂载php目录

    之前刚使用docker启动php,但因为只是简朴启动,很多设置及挂载也没有搞,因为一搞就出错,真是蛋痛,本日好好地梳理了一下,基本都OK吧。在docker下pull下php之后要注意启动的php容器里有以下几个文件及目录比较紧张:
1. /usr/local/etc/php-fpm.conf 这是php的设置文件。
2. /usr/local/etc/php-fpm.d 这里是设置的pool,可以配多个,一般就是www.conf
3. /usr/local/etc/php 这里是php启动加载的扩展文件,比如redis.so设置之类。
    这当然是我现在已经完全明白之后的事,在这之前我只要修改一下最简朴的docker启动php容器下令就会报错误PHP Startup: Unable to load dynamic library usr/local/lib/php/extensions/no-debug-non-zts-20160303/geoip.so,具体如下:
  1. tu@u34:/data01/php$ docker logs -f b321be15a3c4
  2. [09-Nov-2019 08:08:19] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library /usr/local/lib/php/extensions/no-debug-non-zts-20160303/geoip.so - /usr/local/lib/php/extensions/no-debug-non-zts-20160303/geoip.so: cannot open shared object file: No such file or directory in Unknown on line 0
  3. [09-Nov-2019 08:08:19] WARNING: Nothing matches the include pattern /usr/local/etc/php-fpm.d/*.conf from /usr/local/etc/php-fpm.conf at line 125.
  4. [09-Nov-2019 08:08:19] ERROR: No pool defined. at least one pool section must be specified in config file
  5. [09-Nov-2019 08:08:19] ERROR: failed to post process the configuration
  6. [09-Nov-2019 08:08:19] ERROR: FPM initialization failed
复制代码
    我知道这是缺少了geoip.so扩展,但因为没有把相干的目录挂载出来,又没法去修改。现在把目录挂载出来了,只须要去扩展目录/usr/local/etc/php中删除对应的geoip.so就不会把这个错误。不外也可以了解一下geoip为什么报错,这是因为这个扩展依靠系统安装geoip模块,可以在docker中使用pecl安装此模块(会提示对系统有依靠,须要安装)。
    除此之外还须要挂载日记目录,使用/var/log/php吧。docker里面都写到/var/log里面了,但这里有很多其它的日记,不如独立一个文件夹。于是完整的docker启动php下令就出来了,建议建一个新目录,里面保持和docker中的/usr/local/etc一一对应,这样不至于花精力去对应双方的目录文件。别的对php.ini的设置都写在php-fpm.conf中的pool文件中,比如www.conf,启动下令及www.conf设置如下:
  1. #启动命令
  2. tu@u34:/data01/php$ docker run --name php -idt -p 9000:9000 \
  3. -v /opt/www-data/test.kermit.com:/var/www \
  4. -v /data01/php/php-fpm.conf:/usr/local/etc/php-fpm.conf \
  5. -v /data01/php/php-fpm.d:/usr/local/etc/php-fpm.d \
  6. -v /data01/php/php:/usr/local/etc/php \
  7. -v /data01/php/log:/var/log/php \
  8. php镜像名称
  9. #www.conf中添加的配置如下。包括开户慢日志
  10. slowlog = /var/log/php/$pool.log.slow
  11. php_admin_value[error_log] = /var/log/php/fpm-php.www.log
  12. php_admin_flag[log_errors] = on
  13. php_admin_value[memory_limit] = 2048M
  14. php_admin_value[post_max_size] = 2048M
  15. php_admin_value[upload_max_filesize] = 2048M
复制代码
二、在Docker查看容器完整启动下令及mysql ERROR 2059 (HY000): Authentication plugin caching_sha2_password

1. Docker查看正在运行的容器完整启动下令:

    docker安装运行一个镜像之后,偶然忘记了原来是怎么启动的,又没有把原来的启动记载做个完整记载,这时真是不爽了。我找了一些网上说的可以docker完整启动下令的方式,但是不凑效啊。如下是别人说的方法:
docker ps -a --no-trunc
-l, --latest          Show the latest created container (includes all states)
    --no-trunc        Don t truncate output
    但这个方法我试了不可行,--no-trunc选项是让输出不要截取内容,但是即便用了这个选项,也没有表现完整,比如启动的php只会表现docker-php-entrypoint php-fpm,而不会表现挂载的目录文件。很扫兴啊,不外docker中的inspect下令会表现很具体的信息,而我们在启动一个步伐时主要的参数也就是挂载的文件或目录,而这个是可以通过docker inspect 容器ID得到的效果中的HostConfig信息获得。里面有一个字段:Binds,记载了启动时的挂载文件目录明细,目前来看也就只能通过这里本身再拼凑一次启动下令了。
2. docker下安装指定版本镜像及错误

        docker下安装指定版本镜像及错误:ERROR 2059 (HY000): Authentication plugin caching_sha2_password' cannot be loaded:
    一个人搞一堆服务器,特殊是公司流程烦,头真是十个大啊!准备先把预览机弄弄吧,使用docker下载安装mysql,因为情况原因,必须是mysql5.7版本。于是使用docker search搜了一下,发现docker上面也有一些问题,要么你安装官方版本,down的人也是最多最保险的,但它是一个latest最新的版本,要是指定版本搜就没有看到过官方的版本,除了官方版本,其它个人提交的下载量都很少,基本个位数,一大堆0的在后面垫底。很正常啊,个人提交的东西谁敢乱呢!有人可能说你可以加标签啊,我试了docker search mysql:5.7加标签,可以提前搜一下,加了标签下下来的也不是官方的。
        我下了一个mysql的5.7版本,REPOSITORY名称叫做mysql.于是我使用如下下令进行安装。发现它根本不鸟我下载下来的镜像,直接云下载最新版的image了。docker下安装启动mysql5.7的下令如下:
  1. #启动mysql
  2. kermit@u27: docker run -d  -p 3306:3306 --name mysql5.7 \
  3. -v /data01/mysql57/conf:/etc/mysql/conf.d \
  4. -v /data01/mysql57/logs:/logs \
  5. -v /data01/mysql57/data:/var/lib/mysql \
  6. -e MYSQL_ROOT_PASSWORD=test123 \
  7. mysql
  8. ....
  9. #在还没有下载latest版的mysql执行上面的命令直接下载latest版,而不会使用第三行的镜像
  10. kermit@u27:/data01/nginx/conf.d# docker images
  11. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  12. kermit_php          latest              9b3a2ed86cb6        4 hours ago         827MB
  13. kermit_nginx        latest              098b1d014880        4 hours ago         126MB
  14. mysql               5.7                 cd3ed0dfff7e        3 weeks ago         437MB
  15. mysql               latest              c8ee894bd2bd        3 weeks ago         456MB
  16. #可以使用IMAGE ID替代REPOSITORY,这样不会出现这个问题,看来REPOSITORY只是个名称可以重复
  17. kermit@u27: docker run -d  -p 3306:3306 --name mysql5.7 \
  18. -v /data01/mysql57/conf:/etc/mysql/conf.d \
  19. -v /data01/mysql57/logs:/logs \
  20. -v /data01/mysql57/data:/var/lib/mysql \
  21. -e MYSQL_ROOT_PASSWORD=test123 \
  22. cd3ed0dfff7e
复制代码
        在还没有下载latest版的mysql执行上面的下令直接下载latest版,而不会使用第三行的镜像,可以使用IMAGE ID替代REPOSITORY,这样不会出现这个问题,看来REPOSITORY只是个名称可以重复,通过上面开始的方法下载下来的mysql最新版是mysql8.*了,启动正常但是在本地连接mysql时就报了错:
   ERROR 2059 (HY000): Authentication plugin caching_sha2_password' cannot be loaded;
           问题就是MySQL8.0.11版本默认的认证方式是caching_sha2_password ,而在MySQL5.7版本则为mysql_native_password,又是一个变革啊。没时间研究,先用mysql5.7吧。不外网上有提供解决方法,修改mysql的设置文件设置这项参数。写入my.cnf文件后重启MySQL:
  1. [mysqld]
  2. default_authentication_plugin=mysql_native_password
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表