0%

``` shell

导出容器 (发现挂载的目录内文件导出时没有保存在容器中

docker export container_name -o container_name.tar

导入容器 变成镜像

docker import ./container_name.tar test/ubuntu:v1.0

查看容器

docker container inspect

导出镜像

docker save -o fedora-all.tar fedora

导入镜像 不能对载入的镜像重命名

docker load

查看镜像

docker images

查看容器

docker ps -a

运行容器

docker run -it -v /var/www/workspace:/var/www/workspace -p 8989:8989 –name new_name images_name /bin/bash
–restart=always 自启动

#生成镜像
docker commit -a shenmi -m php7.4-fpm php7.4-fpm wx/php:7.4.33-fpm

经测试上面这行命令在 CentOS 7 下目录挂载失败。

在上面这行命令的基础上增加了–privileged=true参数,让容器拥有真正的root权限

docker run –privileged=true –name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /usr/local/docker_data/mysql/data:/var/lib/mysql -v /usr/local/docker_data/mysql/conf:/etc/mysql/ -v /usr/local/docker_data/mysql/logs:/var/log/mysql mysql:5.7

发现nginx错误日志里写满了connect() failed (111: Connection refused) while connecting to upstream,但是请求正常,php-fpm也正常,查询后找到原因:
::1指的是本地ipv6地址
proxy_pass中如果是localhost则会转发给ipv4和ipv6,所以会出现上面的错误日志;
改成127.0.0.1问题解决。
./nginx -s reload

Socket是使用unix domain socket连接套接字/dev/shm/PHP-cgi.sock(很多教程使用路径/tmp,而路径/dev/shm是个tmpfs,速度比磁盘快得多),在服务器压力不大的情况下,tcp和socket差别不大,但在压力比较满的时候,用套接字方式,效果确实比较好。

阅读全文 »

那一天我二十一岁,在我一生的黄金时代。我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。
后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消失,最后变得像挨了锤的牛一样。
可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。

每60秒会抛出Redis::__call failed, because read error on connection异常
开始设置ini_set(‘default_socket_timeout’, -1) 没有解决问题,default_socket_timeout是socket流的超时参数,即socket流从建立到传输再到关闭整个过程必须要在这个参数设置的时间以内完成,如果不能完成,那么PHP将自动结束这个socket并返回一个警告。这个参数也会影响file_get_content等方法。

最后设置OPT_READ_TIMEOUT为-1解决。
出现该问题的原因是poll设置接收超时所致,这个超时默认设置60s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
declare(strict_types=1);

namespace App\Process;

use Hyperf\Process\AbstractProcess;
use Hyperf\Process\Annotation\Process;
use Psr\Container\ContainerInterface;
use Hyperf\Context\ApplicationContext;

#[Process(name: "foo_process")]
class FooProcess extends AbstractProcess
{

public function handle(): void
{
$container = ApplicationContext::getContainer();
$redis = $container->get(\Hyperf\Redis\Redis::class);
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
var_dump('handle:' . $redis->getOption(\Redis::OPT_READ_TIMEOUT));
$redis->subscribe(['r2'], function ($instance, $channelName, $message) {
var_dump($instance);
var_dump($channelName);
var_dump($message);
// TODO: 执行对应的消费操作
});
}
}

使用tp6框架的queue队列时,如果执行时间超过60s,进程会自动kill掉。
设置参数timeout=0 解决
php think queue:work –queue queuename –sleep 0 –timeout 2048

部分参数记录
–memory 128 //该进程允许使用的内存上限,以 M 为单位
–sleep 3 //如果队列中无任务,则sleep多少秒后重新检查(work+daemon模式)或者退出(listen或非daemon模式)
–timeout 60 //创建的work子进程的允许执行的最长时间,以秒为单位
–delay 0 //如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0