一个持续刷新的日志文件/var/log/messages,命令是什么/var/log/messages
Zabbix Aance - Linux log monitor 日志(/var/log/me接下来我们依次进行介通过docker run启动一个容器后,docker会同时挂载该容器的内存文件系统与容器的根文件系统(rootfs),比如绍。ssages,/var/log/secure,其它程序日志皆可) 原创
docker查看日志的命令 docker日志查询
docker查看日志的命令 docker日志查询
docker | 定时清理docker容器日志
其他可以保持默认配置使用linux的crontab命令每天晚上2点定期执行脚本清空容器日那么在最多会生成5个日志文件:志
0 0 2 ? /opt/docker-sh/clean_docker_log.sh
docker restart、start、stop与容器文件系统
通过查看帮助文档查看dockerbuild命令作用是build命令用于使用Dockerfile创建镜像。dockerbuild命令用于从Dockerfile构建镜像。可以在dockerbuild命令中使用-f命令也就是指定要构建的脚本,通过-t输出镜像名称还可以跟:加上版本。大概是在2016/10前后,我们部门使用docker一段时间后偶尔会出现docker exec ... 无法进入容器的问题,环境为centos7.2、docker1.12.6,docker存储引擎为devmapper,经过排查发现容器对应的文件系统已经umount,且发现开发同学用了大量的docker restart ... 作。于是产生docker restart导致容器文件系统umount的疑问,后面对docker restart、start、stop三个命令与容器文件系统关系做了研究,以下是研究的记录。
使用docker stop 停止容器若容器的根文件系统(rootfs)umount,执行 docker exec -it xxx /bin/bash or /bin/sh会触发异常:
同时执行 docker restart xxx会触发异常:
分别查看docker restart、start、stop三个命令的debug信息,这里的实践环境为:centos7.2、docker1.12.6、存储引擎(storage-driver):devmapper、镜像:nginx:1.12
通过上面的日志输出可以了解到
分析发现,docker restart命令并不是stop、start两个命令的顺序叠加,docker restart作并不涉及容器文件系统的处理,开始怀疑的由于docker restart作导致容器的文件系统处于umount状态此处没有找到证据,但为了保证容器的根文件系统与内存系统mount的正确性,对一个容器的重启使用docker stop xxx 然后 docker start xxx,而非docker restart xxx。
如何查看docker 里某个容器的的启动命令
docker run [OPTIONS]可以让用户完全控制容器的生命周期,并允许用户覆盖执行docker build时所设定的参数,甚至也可以修改本身由Docker所控制的内核级参数。Docker会在隔离的容器中运行进程。当运行docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义(译者注:docker run可以控制一个容器运行时的行为,它可以覆盖docker build在构建镜像时的一些默认配置),这也是为什么run命令相比于其它命令有如此多的参数的原因。
Mar DN :认证查询该LDAP的用户DN,包括该用户的完整CN, OU, DC命令格式
$ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
如果需要查看[OPTIONS]的详细使用说明,请参考Docker关于OPTIONS的章节。这里仅简要介绍Run所使用到的参数。OPTIONS总起来说可以分为两类:
设置运行方式:
决定容器的运行方式,前台执行还是后台执行;
设置containerID;
设置网络参数;
- 设置权限和LXC参数;
Operator exclusive options
当执行docker run时可以设置以下参数:
Detached vs Foreground
Container Identification
Name (--name)
- PID Equivalent
IPC Setting
Network Settings
Clean Up (--rm)
Runtime Constraints on CPU and Memory
Runtime Privilege, Linux Capabilities, and LXC Configuration
Detached vs foreground
当我们启动一个容器时,首先需要确定这个容器是运行在前台还是运行在后台。
-d=false: Detached mode: Run container in the background, print new container id
如果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的回话中。需要注意的是,容器运行在后台模式下,是不能使用--rm选项的。
启动的话是 docker start +容器的ID/名称
查看 docker ps -a选项列出最近一次启动的容器
菜鸟一枚,错勿怪
pod里面没有bash怎么进容器
- Foreground在Kubernetes中,每个容器都运行在一个的命名空间中,并且容器的入口点默认是在容器内部的主进程。因此,如果容器内没有安ash或者其他交互式的Shell,我们就无法直接使用bash进入容器。
这种情况下,我们可以使用`kubectl exec`命令来在Pod内部的容器中执行命令。例如,要进入一个没有bash的容器,可以使用以下命令:
```
kubectl exec -it
-- sh
```
上述命令中,`-it`选项用于分配一个伪终端并保持输入输出的交互性,`
`是要进入的Pod的名称,`sh`是在容器内执行的命令,它是大多数Linux发行版中的标准Shell。
需要注意的是,如果容器内没有安装sh,可以尝试使用其他可用的Shell,比如`bash`或`ash`。
值得拓展的是,为了方便进入容器,也可以在部署Pod时,在容器中预先安装一个支持交互式Shell的基础镜像,如alpine或ubuntu。这样,就可以直接使用bash等Shell进入容器,而无需进行额外的设置。
原因解释:Pod是Kubernetes中最小的部署单元,它可以包含一个或多个容器。在某些情况下,Pod内的容器可能没有安装Bash或其他交互式shell。这是因为Pod的设计目标是提供一种轻量级的、高度可扩展的容器编排解决方案,而不是为每个容器都提供交互式shell环境。
1. 使用kubectl exec命令:Kubectl exec命令允许您在正在运行的Pod中执行命令。您可以使用该命令来执行容器内的命令,例如:kubectl exec
hello world<容器名称> -- <命令>
2. 使用日志输出:您可以使用kubectl logs命令来查看Pod内容器的日志输出。这对于查看容器的运行状态和输出信息非常有用。
3. 使用远程登录工具:如果您确实需要与Pod内的容器进行交互式会话,可以考虑使用远程登录工具,如SSH。这需要在Pod内的容器中安装并配置SSH,然后通过SSH客户端连接到Pod。
需要注意的是,使用交互式shell进入Pod内的容器可能会破坏Kubernetes管理的容器环境,并可能导致不可预测的结果。因此,在进行任何作之前,请确保了解容器的用途和设计目标,并使用适当的方法进行交互。
在容器中进入bash,通常需要满足两个条件:首先,容器内部需要安装了bash;其次,你需要有足够的权限进入容器。
如果在某个容器中没有安ash,可能是因为镜像中没有包含bash或者使用了其他替代的shell。一些精简的容器镜像可能会选择使用较小的shell,如Alpine Linux默认使用的是ash。
如果你需要在没有bash的容器中进入容器,可以考虑使用其他可用的shell,如ash、sh等。你可以通过在docker命令中使用`exec`或`run`命令来进入容器,并指定要使用的shell。
此外,进入容器需要具备足够的权限。如果你是以非root用户身份启动容器,可能需要使用`sudo`或者在docker命令中指定`--user`参数来指定用户身份。
拓展内容:随着容器技术的发展,出现了一些专门用于管理和作容器的工具,如Kubernetes、Docker Come等。这些工具提供了更便捷的方式来进入容器,通过执行一些特定的命令或者通过工具的界面进行作。这样可以避免直接进入容器对容器进行作的需求,提高了容器的可管理性和安全性。
如何在容器中运行docker命令
设置镜像的默认资源,也就是说用户可以使用该命令来覆盖在镜像构建时的一些默认配置。交互式运行docker容器
4.3 我使用的是docker 容器跑的Jenkins,有一些有用的命令[root@gage ~]#docker run -t -i ubuntu:14.04 /bin/bash
root@89471dce598b:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root in sys usr
root@89471dce598b:/# pwd
/root@89471dce598b:/# exit
exit
后台运行一个容器让其输出hello world
[root@gage ~]# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
4bc1b2f2257e253e45b672811653f409b53176ac6670d4ddaeabe028dcd35b8e
显示正在运行的docker容器
[root@gage ~]# docker ps
Container
ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
4bc1b2f2257e
seconds insane_bhabha
使用docker logs命令查看容器标准输出
[root@gage ~]# docker logs insane_bhabha
[root@gage ~]# docker stop insane_bhabha
insane_bhabha
[root@gage ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Jenkins上集成多个LDAP认证
1. 安装LDAP插件
[ ]
2. 添加一个Jenkins LDAP配置
root DN : 这里填写你需要的base路径, 如果这里不填则勾选 Allow blank rootDN ,但是user search base和group search base则不能为空,否则会报找不到object的错误
User search base :可以不填,则会查找改root DN下的所有用户
User search filter :一般包含三种, uid={0}; cn={0}; sAMAccountName={0}, 如果不确定LDAP 怎样设置的,则可以依次尝试
Group search base : 可以不填,则会查找改root DN下的所有组
Mar Password : 上述用户的密码
3. 添加另外一个LDAP 的配置
点击 Ad设置容器的CPU和内存参数;d , 可以按照上述配置继续配置,这两个可以是不同的配置
配置多个ldap时建议勾选上 Ignore if unailable ,这样如果其中一个ldap server不可用,会尝试使用下一些个ldap server。
4. 配置过程中遇到的问题
4.1 错误日志:
User lookup: failed for user "your_username" LdapCallback;null; nested exception is jax.naming.PartialResultException [Root exception is jax.naming.CommunicationException: dc1.dc2.dc3:389 [Root exception is ja.UnknownHostException: dc1.dc2.dc3]] LDAP Group lookup: could not verify.
其中your_username是你试图登陆的一个AD用户; dc1.dc2.dc3是你设置的DC=dc1, DC=dc2, DC=dc3,我这里出现了该问题是因为LDAP server我提供的是一个IP地址
原因:该问题是找不到 dc1.dc2.dc3该域名,请在AD上配置域名解析 your_L :这里填写LDAP server的地址即可DAP_IP 到dc1.dc2.dc3或者临时在系统的/etc/hosts文件中添加该域名解析
4.2 错误日志:
LdapCallback;LDAP response read timed out, timeout used:60000ms.; nested exception is jax.naming.NamingException: LDAP response read timed out, timeout used:60000ms.; remaining name ''
这个问题是因为connection pool的连接有问题,解决方案是在Jenkins的LDAP配置中添加一个环境变量 com.sun.jndi.ldap.connect.pool 设为 false , 具体可参考:[ ]
docker logs --following container_name/ID 查看日志
docker exec --user root -it container_name/ID /bin/bash 以root用户登陆该容器
4.4 如果登陆速度较慢,可以enable cache来减少查询LDAP server的负载
docker container如何支持日志rotate
你好,作命令如下:docker container如何支持日志rotate
缺省情况下docker daemon会把container日志存放到: /var/lib/docker/containers/
其中
/var/lib/docker/containers/49f9b1d950553a732c6493bb5794871f7169f235de0be50b0da1c98f3d9f7e2b/49f9b1d950553a732c6493bb5794871f7169f235de0be50b0da1c98f3d9f7e2b-json.log
在container里面执行的进程输出的stdout和stderr都被被docker daemon输出到上述日志文件。
上述缺省情况下是一个json格式的文本文件,随着container运行时间的增长,日志文件会越来越大,最终占用过量的磁盘空间。
采用log rotate的办法自动删除多余的历史日志信息,保证每个container占用Detached (-d)最多的磁盘空间。
docker本身提供这种功能。
docker log rotate提供的策略,有两个参数用来设置log rotate的配置值:
两个数字相乘就是一个container允许占用的日志磁盘空间。例如:
设: log-max-size=10M, log-max-file=5
其中/var/lib/docker/containers/
有一个限制:
docker log rotate只支持基于文件大小轮转,不支持基于时间的rotate,例如每小时生成一个日志文件,每天生成一个日志文件这种方式;这个需求还是很常用的。
这样所有新起来的container都能使用日志轮换的功能,而不需要为每个container单独设置。
重启docker daemon,配置生效:
在每个container启动的时候在命令行设置:
通过查看帮助文档查看dockerbuild命令作用
2、访问日志配置错误:您可以检查Docker配置文件(通常位于/etc/docker/daemon.json)中是否启用了访问日志,并且是否配置了正确的路径。例如,以下是启用访问日志并最基本的docker run命令的格式如下:将其写入/var/log/docker/access.log的示例配置:{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3","labels":"com.dockere.serv","env":"os,customer","mode":"non-blocking","compress":"true","name":"access","tag":"{{.ID}}.{{.FullID}}","config":"/path/to/access-log-config.json","labels":"com.dockere.serv","env":"os,customer"}}window的docker的access.log文件为空
拓展内容:Kubernetes提供了其他方法来与Pod内的容器进行交互,即使没有Bash或其他交互式shell。以下是一些常用的方法:window的docker的access.log文件为空有以下几种原因:
1、没有产生访问日志:如果Docker容器没ubuntu:14.04 "/bin/sh -c 'while tr" 27 seconds ago Up 26有收到任何流量,那么access.log文件将为空。可以尝试在容器中运行一些命令,以确保容器正在接收请求并生成访问日志。
3、文件权限问题:请确保access.log文件所在的目录对Docker进程具有可写权限。