docker构建php、nginx两个分开的容器,但是相连连不上的问题总结
在网上搜罗了一圈,发现所有牵扯到php和ngin的镜像,都是php-nginx“粘”在一起的,想要搜到一个php、nginx俩分开的镜像还真不好找。于是便自己制作。但是在制作过程中,发现php和nginx通过docker的link指令连在一起的时候,总是连不上,经过了一番折腾,终于发现了其中的猫腻。应该注意三个点:
1 nginx配置记得要指定php文件的路径123456789101112131415161718192021server { listen 80; server_name phptest.com; root /usr/local/nginx/html/php_nginx; ## 标记1 index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php(.*)$ { try_files $uri ...
构建docker镜像,将nginx与php环境放在一个镜像中
前言nginx和php-fpm放在一个镜像里面,这样更好配置,但是有一个问题,这样不利于php-fpm和nginx两个服务动态扩容,因为二者的吞吐量可能不一样,同时扩容可能会造成资源浪费,但是分开,又会造成一个问题,那就是nginx和php-fpm如何通信的问题变得有些棘手。
以下是Dockerfile文件的内容,其余可以参考我的github地址。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465FROM alpineLABEL MAINTAINER="<crazyjums@gmail.com>"ADD nginx-1.18.0.tar.gz /tmpCOPY nginx/nginx.conf /tmp/nginx.confCOPY start.sh /tmp/start.shCOPY nginx/include/phptest.conf /tmp/phptest ...
docker-compose无法启动容器,但是手动创建镜像之后再启动就能正常启动
问题遇到一个问题,我自己用Dockerfile创建了一个nginx和php-fpm一体的镜像,但是使用docker run加上一些参数可以正常启动,但是使用docker-compose配置成服务却无法正常启动,这就很奇怪了,于是,Google了一番,找到了解决办法。
以下是我的Dockerfile:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263FROM alpineLABEL MAINTAINER="<crazyjums@gmail.com>"ADD nginx-1.18.0.tar.gz /tmpCOPY nginx/nginx.conf /tmp/nginx.confCOPY start.sh /tmp/start.shCOPY nginx/include/phptest.conf /tmp/phptest.confCOPY nginx/include/defau ...
nginx: error while loading shared libraries: libpcre.so.1
我用dockerfile创建了一个nginx镜像,但是在启动的时候,没有启动成功,查看镜像日志,看到如下错误:
1./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
我的dockerfile如下:
1234567891011121314151617181920212223242526272829303132333435363738394041FROM alpine:latestLABEL AUTHOR="ZHG"ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ apk update && apk upgrade && \ apk add --no-cache -- ...
diff cgi fastcgi php_cgi php_fpm
写在最后欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
PHP Avoid to repeat the same try catch(PHP避免重复使用相同的try catch)
如果你的代码中需要频繁使用try-catch包括代码,且异常处理方式都相同,记录日志并抛出一个友好的错误提示,那么可以使用下面的方式进行改进。
原代码:
12345678910111213141516171819202122232425262728try { // Use Stripe's library to make requests...} catch(\Stripe\Error\Card $e) { // Since it's a decline, \Stripe\Error\Card will be caught $body = $e->getJsonBody(); $err = $body['error']; print('Status is:' . $e->getHttpStatus() . "\n"); print('Type is:' . $err['type'] . "\n" ...
vue中v-bind和v-model的区别?
简单说,区别如下:
v-bind用来绑定数据和属性以及表达式,缩写为’:‘
v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用
1 v-modelv-model多在表单中使用,在表单元素上创建双向绑定,根据控件类型选择正确的方法更新元素,可以绑定text、radio、checkbox、selected
1.1 绑定text12<input type="text" v-model="val" /><p> {{val}} </p>
1.2 绑定radio123<input type="radio" value="one" v-model="radioVal" /><input type="radio" value="two" v-model="radioVal" /><label for v-bi ...
Vue中的import中@的作用
这是webpack的路径别名,相关代码定义在配置文件webpack.base.config里:
1234567891011resolve: { // 自动补全的扩展名 extensions: ['.js', '.vue', '.json'], // 默认路径代理 // 例如 import Vue from 'vue',会自动到 'vue/dist/vue.common.js'中寻找 alias: { '@': resolve('src'), '@config': resolve('config'), 'vue$': 'vue/dist/vue.common.js' }}
其中resolve()函数是文件里面自定义的函数:
123function reso ...
PHP中array_walk和array_map的区别?
1 区别
array_map 有Array返回值
1、array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后新的数组,若函数作用后无返回值,则对应的新数组中为空。2、回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。3、提示:您可以向函数输入一个或者多个数组。
若相函数输入2个数组,其函数接受参数也应该有两个,map给函数传值时,是每次从两个数组中分别取一个传给函数。即多个数组之间是同步提交的,不是提交完一个数组再提交下一个提交几个数组,则函数也需要有几个参数
语法:
1function array_map(?callable $callback, array $array, array ...$arrays): array {}
结果导向:通过回调函数对当前数组A的值进行处理,之后将被处理的值放到一个新的数组B中,并返回数组B,原数组A不变。
返回值是经过回调函数处理之后生成的新数组
回调函数有几个形参,则array_map就要传几个数组给回调函数
回调函数基础形参只是Array的 ...
php使用redis的scan命令时遇到的坑
1 问题以前的项目中有用到redis的keys命令来获取某些key,这个命令在数据库特别大的情况会block很长一段时间,所以有很大的安全隐患,所以这次打算优化一下。
官网建议使用scan命令来代替。
以下是使用scan命令来匹配相应模式的key的代码:
123456789$redis = new Redis();$redis->connect('localhost', 6379); $iterator = null;while ($keys = $redis->scan($iterator, 'test*')) { foreach ($keys as $key) { echo $key . PHP_EOL; }}
这代码应该没问题吧?这是从jetbrains 公司旗下软件phpstorm的代码提示库中摘出来的,只加了pattern参数,但是运行结果却是有问题的。
使用keys命令可以得到设置的”test1″,”test2″,…..,”test5″这5个key,但是使 ...