Write the Code. Change the World.

分类目录
12月 18

redis Connection refused

redis 容器自身,对 redis 的操作(连接使用)都 ok。 宿主机或其他容器连接 redis 总是报 Connection refused 错误。这里使用了 redis.conf。 将 redis.conf 的 bind 修改如下。

# 修改 redis.conf bind (默认是 bind 127.0.0.1 -::1)
bind 0.0.0.0 -::1

# 重启 redis
docker restart xxx(redis 容器 id)

重点

其他容器连接 redis 时,host 可以写 redis 这个和 docker-compose.yaml 中配置的 service 相对应。这个并不是容器名。连接 mysql 也可以这样。

services:
  mysql: 
    …
  redis:
    …

redis 其他配置

**docker-compose.yaml 中

# volume 配置 (其中,宿主机的 redis.conf 不存在,就会使用默认的 redis.conf)
# 这里主要三个方面:配置文件、数据、日志
    volumes:
    - ./conf/redis/redis.conf:/etc/redis/redis.conf
    - ${DATA_DIR}/redis:/data:rw
    - ${LOG_DIR}/redis:/logs
# 设置密码启动 redis**
# 123456 是 redis 密码
command: redis-server /etc/redis/redis.conf --requirepass "123456"

redis.conf 配置

配置项 描述
bind 指定本机网卡对应的IP地址,限制本机访问,默认 bind 127.0.0.1
daemonize 指定是否为守护进程方式运行,默认值为no
logfile 指定日志文件路径,默认值为 logfile ’ ', 默认为控制台打印,并没有日志文件生成
appendonly 是否开启持久化,默认值为 no

当 daemonize 设置了yes,表示redis在后台运行,当执行 docker-compose 执行启动 redis 进程时,docker 发现自己无事可做,容器自动结束,所以导致 redis 启动失败。

appendonly 为 yes 时,volume 需要配置 :rw,指定可写可读。

容器启动后设置密码

# 找到容器 id
docker ps

# 进入容器
docker exec -it xxx(redis 容器 id-前三位即可) bash

# 进入 redis
redis-cli

# redis 使用 (如果没设置密码,可以使用了。如果设置了密码,则提示 no auth)
redis get key

# 可以查看密码信息
config get requirepass

# 设置密码
config set requirepass yourPassword

# 输入密码
auth yourPassword

# 也可以在连接的时候带上密码
redic-cli -a yourPassword
12月 18

docker 网络

常用命令

# 显示网络
docker network ls

# 查看某个网络信息
docker network inspect xxx

# 删除网路
docker network rm xxx

# 批量删除网络
docker network rm $(docker network ls -q)

批量删除网络,有默认的三个网络是不能删除的。无论是批量删,还是单独删,都不可以。这三个网络是 bradge、host、none

NETWORK ID     NAME      DRIVER    SCOPE
a0457db48e55   bridge    bridge    local
f07f326dbd2b   host      host      local
437d811528b0   none      null      local
12月 17

https://blog.vini123.com/828

操作

  1. 设置主机名。
  2. 设置 ssh 连接一段时间后,断开的问题。
  3. 自定义用户,禁用 root 用户登录(使用普通用户登录,并使用公钥登录)。
  4. 安装 docker 环境。
12月 17

操作

# 先安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装
yum -y install docker-ce

# 启动
systemctl start docker

# 设置开机自启动
systemctl enable docker

# docker info

再来安装 docker-compose

打开 https://github.com/docker/compose/tags 选择想要的版本,点击进去。


这里我选择的 v2.23.3,打开后的链接是这个。

https://github.com/docker/compose/releases/tag/v2.23.3

选择对应系统的文件,我这里选择的是 docker-compose-linux-x86_64


下载

cd /usr/local/src

wget  https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version

ubuntu 安装 docker

移除旧版本

如果你已经安装了旧版本的 Docker,首先卸载旧版本:

sudo apt remove docker docker-engine docker.io containerd runc

安装依赖包

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

添加 Docker 的官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

设置 Docker 的稳定版存储库

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

验证安装

运行以下命令验证 Docker 是否正确安装:

sudo docker run hello-world

将用户添加到 docker 用户组

为了避免在每次运行 Docker 命令时都需要使用 sudo,可以将当前用户添加到 docker 用户组:

sudo usermod -aG docker $USER

请注意,在更改用户组后,你可能需要注销并重新登录才能使更改生效。

安装 Docker Compose

下载 Docker Compose 的二进制文件:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

授予执行权限:

sudo chmod +x /usr/local/bin/docker-compose

验证 Docker Compose 是否正确安装:

docker-compose --version
12月 17

mac docker 配置国内镜像

通过 docker 客户端工具。点击设置->Docker Engine。增加以下配置。

{
  …,
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

点击 Apply & Restart 按钮,保存并重启。

# 查看
docker info

感觉用了镜像速度也那样。

12月 11

docker 的确是个好东西。该早一点就用起来。当下还在熟悉和练习中。

渐渐去丰富和完善。

.env

# 时区
TZ=Asia/Shanghai

# 项目对应文件夹
SOURCE_DIR=./www

# nginx https://nginx.org/
NGINX_NAME=nginx
NGINX_VERSION=1.25.3
NGINX_HTTP_HOST_PORT=80
NGINX_HTTPS_HOST_PORT=443
NGINX_CONFD_DIR=./conf/nginx/conf.d
NGINX_CONF_FILE=./conf/nginx/nginx.conf
NGINX_SSL_CERTIFICATE_DIR=./conf/nginx/ssl
NGINX_LOG_DIR=./logs/nginx

# php8.3
PHP_LOG_DIR=./logs/php8.3

# mysql
MYSQL_DATA=./data/mysql8.2-data
MYSQL_PORT=3306

# redis
REDIS_PORT=6379

继续阅读

12月 04

记录一些问题

  1. 通过 docker-comppse.yml 配置多个服务(有 php,nginx,mysql 等),并运行。如果在 php 的 bash 中访问使用 nginx 或 mysql 这些服务呢。

当前,在项目中,无法通过 127.0.0.1 来连接 mysql 容器中的 mysql。可以通过修改 手动 修改 ip 的方式来搞定。

# 查看当前容器的 ip
ip addr

# php 和其他容器公用宿主机的 ip 修改项目中连接 mysql 的 ip 得到
172.19.0.1

docker php 安装 mysql_pdo 扩展

docker exec -it xxx bash

# 安装 pdo pdo_mysql 扩展
docker-php-ext-install pdo pdo_mysql

# 安装 mysqli 扩展
docker-php-ext-install mysqli

# 退出 重启 (xxx 容器 id)
exit
docker restart xxx

bash: ip: command not found

# 进入容器中
apt-get update

apt-get install -y iproute2

# 这个时候就有了
ip addr show

文章

https://www.jianshu.com/p/2217cfed29d7

https://blog.csdn.net/longfeng995/article/details/130704949

https://ricen.eu.org/index.php?control=doc&view=detail&id=326&i=1

12月 02

下边来弄弄 docker compose。 的确很好用。

准备

先准备一下文件。

.
├── docker-compose.yml
└── vini123
    ├── nginx
    │   └── default.conf
    └── www
        └── nginx
            └── index.php

这里先看看 docker-compose.yml 文件。

继续阅读

12月 01

常见命令一

# docker 信息
docker info
docker version

# 查看镜像
docker images

# 运行一个镜像
# --name 别名
# -p 端口映射( 宿主机端口:容器服务端口 )
# -d 以守护进程的方式运行(不加就会卡住占用窗口)
docker run --name my-nginx -d -p 80:80 nginx

# 查看活着的容器
docker ps

# 查看活所有容器
docker ps -a

# 停止容器
docker stop xxx

# 启动一个关闭的容器
docker start xxx

# 查看容器状态
docker stats

# 进入容器(以bash的形式进行交互模式)
docker exec -it xxx bash

# 退出容器(容器依然在运行)
exit

# 重启容器 (xxx 为容器 id 的前三个字符即可)
docker restart xxx

# 删除容器 (删除前需先停止)
docker rm xxx

# 删除镜像
docker rmi nginx

继续阅读

4月 07

如果发现配置了定时任务,却发现没有执行到。可以先看看日志。

# 看日志
tail -f /var/log/cron

# 查看日志文件
ll /var/log/cron*

# 看哪些用户在使用定时任务
ls /var/spool/cron/

# 查看某个用户的任务详情。比如 nginx
more /var/spool/cron/nginx

# 开机自启动
systemctl enable crond

如果没有日志,请查看下边的方法

情况是这样的。本来是有日志的。如果把日志删除了,即使重启 crontab 服务也是没有日志的。还有一种就是以前根本就没打开日志。这两种情况下边的方法都可以搞定。还有说在 /etc/rsyslog.d 下建立 50-default.conf。那还不如下边的方法。 下边的方法是通过 chatGPT 查询到的。有时候还是很方便的。

要查看CentOS 8 crontab的日志,您可以按照以下步骤进行处理:

  1. 打开 /etc/rsyslog.conf 文件并找到以下行:

cron.* /var/log/cron

  1. 将上述行的注释符号(“#”)移除,以启用cron日志记录功能。保存并关闭该文件。

  2. 重新启动 rsyslog 服务,以确保更改生效:

$ sudo systemctl restart rsyslog

  1. 检查 /var/log/cron 文件,以查看生成的 cron 日志。

如果上述方法不起作用,则您可以尝试在 crontab 命令中将日志记录级别设置为更高的级别。例如,将以下行添加到 crontab 文件的顶部:

MAILTO=user@domain.com

          • /path/to/script > /dev/null 2>&1

在上述命令中,将 MAILTO 设置为您的邮件地址,以接收有关 crontab 任务运行情况的通知。将脚本路径替换为实际的脚本路径,并将输出重定向到 /dev/null,以避免在终端中看到任何输出。将 "> /dev/null 2>&1" 去掉就可以在/var/spool/mail用户文件夹下查看cron任务的执行情况了。