当前位置: 首页 > java >正文

Linux,docker知识补充

1.创建多个用户(newusers)

首先。创建一个test.txt 文件,在里面写如创建信息,格式如下:


username1:password1:UID1:GID1:User Full Name1:/home/username1:/bin/bash
username2:password2:UID2:GID2:User Full Name2:/home/username2:/bin/bash
字段说明:

username:用户名

password:加密后的密码(可以用 openssl passwd -6 "密码" 生成)

UID:用户ID(可选,留空则自动分配)

GID:组ID(可选,留空则自动分配)

User Full Name:用户全名(可选)

/home/username:家目录

/bin/bash:默认 shell(可选)

然后,newusers test.txt

最后,getent   passwd 验证是否创建成功

2.at 命令

at  13:45 2025:8:12 

atq  展示任务列表

3.sleep 

sleep 5m   //休眠5分钟,也可以换成s,m,h,d 

date;sleep 1m;date  //现实时间,休眠1分钟后,再次显示时间

当休眠时想退出。ctrl+c 

4.给用户分配sudo权限

1.使用 visudo 编辑配置文件:
sudo visudo


2.添加以下行(给单个用户 sudo 权限):
用户名 ALL=(ALL:ALL) ALL

用户名:要授权的用户

ALL=(ALL:ALL) ALL:

  1. 第一个 ALL:允许在任何主机上使用 sudo
  2. (ALL:ALL):可以以任何用户和组的身份执行命令
  3. 最后一个 ALL:可以执行所有命令

如果希望用户免密码使用 sudo(适用于自动化脚本,但安全性较低):
用户名 ALL=(ALL) NOPASSWD:ALL
保存并退出(visudo 会自动检查语法)。

5.vim编辑器显示和关闭行号

在命令模式下

:set nu  显示行号

:set  nonu 关闭行号

6.vim编辑器查找

在命令模式下

:/查找内容

7.vim跳到指定行 

:42<Enter>    跳转到第 42 行
42G    跳转到第 42 行

8.crontab命令

查看当前用户的 crontab 文件:

crontab -l

编辑当前用户的 crontab 文件:

crontab -e

删除当前用户的 crontab 文件:

crontab -r

列出某个用户的 crontab 文件(需要有相应的权限):

crontab -u username -l

编辑某个用户的 crontab 文件(需要有相应的权限):

crontab -u username -e

进入文件中。按照f1 f2 f3 f4 f5 program格式编写文件。

如:40 15 * * * touch  /home/abc.txt   //每天的15:40在/home/路径下创建abc.txt文件

9.su、su-、sudo的区别

命令密码要求环境变量适用场景安全性
su目标用户密码保留原环境临时切换用户
su -目标用户密码加载目标环境完全切换到目标用户环境
sudo当前用户密码保留原环境临时提权执行命令

补充说明

  • su:直接切换用户但保留原环境变量,可能导致权限混淆。
  • su -:模拟目标用户完整登录环境,包括HOME和PATH变量。
  • sudo:通过配置文件(/etc/sudoers)限制权限,避免直接暴露root密码。

安全性对比

  • su需共享目标用户密码,风险最高。
  • sudo仅需当前用户密码,且支持审计日志,安全性最佳。

10.容器的重启策略

Docker 容器的重启策略用于控制容器在退出或系统重启时的自动恢复行为,是保障服务高可用的重要机制。以下是 Docker 支持的几种重启策略及其适用场景:

以下是整理后的 Docker 容器重启策略对比表格:

1.重启策略

策略触发条件典型应用场景备注
no容器退出时不自动重启测试环境、临时任务默认策略
always无论退出状态如何都重启(包括手动停止后 Docker 服务重启)关键服务(如数据库、Web 服务器)可能因手动停止后意外恢复
on-failure仅当容器异常退出(非0状态码)时重启需要故障恢复但避免无限重启的服务可设最大重试次数(如 on-failure:3
unless-stopped类似 always,但排除手动停止的容器生产环境长期运行服务Docker 服务重启后不会恢复手动停止的容器

2. 配置方法


(1)启动容器时指定


docker run -d --restart=always nginx  # 始终重启
docker run -d --restart=on-failure:5 redis  # 异常时最多重启5次:cite[6]:cite[10]


(2)修改运行中的容器


docker update --restart=unless-stopped <容器名或ID>:cite[5]:cite[8]


(3)Docker Compose 配置yaml文件中


services:
web:
image: nginx
restart: unless-stopped
db:
image: postgres
deploy:
restart_policy:
condition: on-failure
max_attempts: 3:cite[1]:cite[9]

3.注意:

  • 避免与 --rm 同时使用:--restart 和 --rm(退出后删除容器)冲突。
  • 资源监控:频繁重启可能占用资源,建议为 on-failure 设置重试限制。
  • 日志排查:自动重启的容器需结合日志分析根本原因(如 docker logs)。
  • 存储持久化:数据库类服务需挂载卷,避免重启后数据丢失。

11.服务名访问网络

使用 Docker Compose 或 自定义 Docker 网络 时,容器间可通过服务名通信。

同一网络内的容器 无需知道 IP,直接使用 服务名 作为主机名访问。

# 创建自定义网络
docker network create mynet

# 启动两个容器并加入同一网络
docker run -d --name web --network mynet nginx
docker run -d --name db --network mynet postgres

# 在 web 容器内 ping db
docker exec -it web ping db  # 成功解析

12.docker compose查看日志

docker-compose logs

注:

确认你位于正确的目录,如果文件在其他目录,切换到包含 compose 文件的目录

13.一个容器需依赖另一个容器启动

1. Docker Compose 的 depends_on + 健康检查(推荐)
在 docker-compose.yml 中定义依赖关系,并结合健康检查确保依赖服务真正可用:

version: '3.8'
services:db:image: postgreshealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 5stimeout: 5sretries: 10environment:POSTGRES_PASSWORD: exampleapp:image: my-appdepends_on:db:condition: service_healthy  # 等待 db 健康状态为 truerestart: on-failure

关键点:

  1. depends_on 仅控制启动顺序,不保证依赖服务已准备好(需配合健康检查)。
  2. condition: service_healthy 确保依赖服务通过健康检查后才启动 app。

生产环境:优先使用 健康检查 + depends_on(如数据库的 pg_isready 或 Redis 的 redis-cli ping)。

开发环境:用 wait-for-it.sh 快速验证。

复杂依赖:结合应用层重试(如微服务调用)。

14.compose启动失败怎么办

1. 检查错误日志


首先查看详细的错误信息,以确定具体原因:


docker-compose logs [服务名]  # 查看某个服务的日志
docker-compose up --force-recreate  # 强制重建容器并显示实时日志


2. 常见问题及解决方法

(1) 配置文件语法错误
问题:docker-compose.yml 文件格式不正确(如缩进错误、字段拼写错误)。

解决:

使用 YAML 校验工具检查语法(如 YAML Lint)。

确保 version 和 services 字段正确2。

(2) 端口冲突
问题:容器端口与宿主机端口冲突(如 Bind for 0.0.0.0:80 failed: port is already allocated)。

解决:


docker ps -a  # 查看已占用的端口
netstat -tuln | grep 80  # 检查宿主机端口占用
修改 docker-compose.yml 中的端口映射(如 "8080:80" 改为 "8081:80")67。

(3) 镜像拉取失败
问题:镜像不存在或网络问题导致拉取失败。

解决:


docker pull 镜像名:标签  # 手动拉取镜像
docker-compose build   # 重新构建镜像(如果使用本地 Dockerfile)
检查 Docker Hub 或私有仓库的镜像名称是否正确2。

(4) 容器启动后立即退出
问题:容器无前台进程(如 Exited (0))。

解决:

添加 tty: true 或 stdin_open: true 保持容器运行:
services:
alpine:
image: alpine
tty: true  # 保持终端开启:cite[4]:cite[5]。
指定长期运行的命令(如 command: tail -f /dev/null)。

(5) 依赖服务未就绪
问题:服务依赖的数据库或其他服务未启动完成。

解决:

使用 depends_on + 健康检查:
services:
app:
depends_on:
db:
condition: service_healthy
db:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
或使用 wait-for-it.sh 脚本等待端口可用7。

(6) 权限问题
问题:Couldn't connect to Docker daemon。

解决:
sudo usermod -aG docker $USER  # 将当前用户加入 docker 组
newgrp docker  # 刷新用户组
sudo systemctl restart docker  # 重启 Docker 服务:cite[8]。

http://www.xdnf.cn/news/17720.html

相关文章:

  • 自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
  • C++少儿编程(二十二)—条件结构
  • 通过限制对象的内存分配位置来实现特定的设计目标
  • powerbi本地报表发布到web,以得到分享链接
  • Day13 Vue工程化
  • SQL 语言分类
  • 人大BABEC地平线高效率具身导航!Aux-Think:探索视觉语言导航中数据高效的推理策略
  • @RequestMapping接收文件格式的形参(方法参数)
  • idea git commit特别慢,cpu100%
  • 13.深度学习——Minst手写数字识别
  • 嵌入式第二十六天(文件IO相关操作)
  • 基于PROFINET的西门子PLC通讯:S7-200与S7-1200在自动化仓储中的协同应用
  • NetworkManager配置热点
  • 6深度学习Pytorch-神经网络--过拟合欠拟合问题解决(Dropout、正则化、早停法、数据增强)、批量标准化
  • Qt树形控件QTreeWidget详解:构建可编辑的多级课程结构
  • 牛客疑难题(6)
  • 需求沟通会议如何组织
  • 呼吸道病原体检测需求激增,呼吸道快检试纸条诊断试剂生产厂家推荐,默克全链解决方案助IVD企业把握百亿风口
  • Java调用Vue前端页面生成PDF文件
  • JMeter并发测试与多进程测试
  • 开疆智能Ethernet转ModbusTCP网关连接发那科机器人与三菱PLC配置案例
  • Jenkins 实战指南-项目自动构建部署全流程通关
  • 快速了解自然语言处理
  • RIOT、RT-Thread 和 FreeRTOS 是三种主流的实时操作系统
  • 【debug 解决 记录】stm32 debug模式的时候可以运行,但是烧录没法执行
  • 鸿蒙下载图片保存到相册,截取某个组件保存到相册
  • 海康视觉相机驱动软件参数配置
  • 【C++】哈希
  • Unity:GUI笔记(一)——文本、按钮、多选框和单选框、输入框和拖动条、图片绘制和框绘制
  • 电商双 11 美妆数据分析:从数据清洗到市场洞察