1. 首页 > 电脑手机 >

docker看日志命令 docker怎么看日志

1、 service docker start // 启动docker

docker看日志命令 docker怎么看日志docker看日志命令 docker怎么看日志


2、 docker images // 查看docker所安装的镜像

3、 docker search [name] 查询某个镜像 例如查询mysql docker search mysql

4、 docker pull [name] 拉取某个镜像 例如mysql docker pull mysql

5、 docker pull [name] [:tag] tag版本号 如果不写默认拉取最新的版本

例如: docker pull mysql:5.7

6、 docker rmi [imgaeId] 删除命令,imageId是镜像id

2.1 新建一个新的容器 docker pull centos

2.2 docker run [可选参数] image名字

参数说明

--name="Name" 给容器命名

-d 后台方式运行

-p [主机端口]:[容器端口] 指定容器的端口 例如启动tomcat 命令: docker run -p 8081:8080 tomcat 解释:8081是对外访问(服务器)的端口。8080是docker里面的tomcat端口. tomcat是镜像拉取下来后的名字. 例:若别人访问。IP+8081端口才能访问到tomcat启动的项目

-P 大写P是随机指定端口

-it 与容器交互,就是进入到容器里面

命令: docker run -it [镜像名称] /bin/bash 例子: docker run -it centos /bin/bash

docker ps 查看运行中的容器

docker ps -q 只查询运行容器的编号,一般与下面-a合并使用, docker ps -aq

docker ps -a 查看曾经运行过的容器

docker ps -a -n=1 加上-n可以指定查询最近几个运行的容器、

Ctrl+p+q 这样退出就不会停止容器

docker rm -f [容器id] 指定删除某个运行的容器

docker rm -f $(docker ps -aq) 删除全部运行的容器

docker start [容器id] 启动容器

docker restart [容器id] 重启容器

docker stop [容器id] 停止容器

docker kill [容器id] 强制停止容器

docker run -d [镜像名] 例如: docker run -d centos

但是有问题, docker ps 查询不到运行的容器

原因:docker容器用后台运行,就必须要有一个前台进程,docker发现没有应用,所以就自动停止

docker logs -tf --tail 10 [容器id]

t的意思是时间戳,f保留日志打印窗口,tail持续打印,10打印最后10条

docker top [容器id]

docker inspect [容器id]

方式一: docker exec -it [containt_id] /bin/bash // 进入该镜像内部

docker cp [容器id]:[容器路径] [主机路径]

摘要: Docker

容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等

容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下

在实际使用中启动一个镜像,例如

-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量

直接构建成容器

开启一个终端启动容器内部,打印指定的环境变量a

此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量

因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构

其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本

Dockerfile中启动run.sh脚本作为容器执行命令

在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下

-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如

如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下

同目录下start.sh内容是打印1

构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2

docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出

对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是

测试一个Dockerfile输出1

在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT

容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如

显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如

除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如

在容器停止之后可以使用 docker start 再启动一个停止的容器,例如

除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如

查看容器详情使用 docker inspect ,比如

在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令

容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如

除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况

当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台

创建Dockerfile以及构建镜像,启动容器

启动一个脚本不断请求api接口

进入容器内部查看日志

另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出

此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式

此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致

如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包

此时退出容器,并且删除容器,最后从镜像重新生成容器

此时进入容器检查,并不存在pymongo包

如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下

以新安装pymongo的容器为例,对新容器使用docker commmit

新生成的镜像叫做xiaogp/my_image_test:v2

从新镜像启动容器并进入容器查看存在新安装的pymongo

不启动docker服务,会报错:

查看docker容器hash值:

查看docker ps完整命令:

然后可以根据contnainer id打开docker命令行

容器文件复制,和cp类似

查看所有:

查看digest:

查看简写hash:

忽略简写hash:

过滤:

docker images -f xxxx

过滤标签格式 "key=value",如果有多个条件,则使用这种 --filter "key1=value" --filter "key2=value"

过滤没有打标签的镜像:

查正则:

格式化展示:

docker images --format

查看日志最后20行:

显示实时log,和tail -f 一个效果:

grep 过滤 log:

根据时间过滤查看 log:

注意,docker logs 不支持 --until

docker logs日志文件存储路径

docker 镜像信息:

cd var/lib/docker/containers/容器ID

在docker目录下,进入image文件夹,找到repositories.json文件

repositories.json文件详细记录了镜像一些信息

mac下docker镜像保存位置:

docker日志查交易耗时怎么查。

1、查询容器的id。

2、创建一个log文本,保存。

3、将日志文件输出到file.log中。

4、查看一下文件有内容,说明成功了。

将日志输出到Docker容器外

我们可以利用 docker logs 命令查看 Docker 容器内部应用程序运行时所产生的日志,可以免除首先进入 Docker 容器,再打开应用程序的日志文件的过程。docker logs 会监控容器中操作系统的标准输出设备(STDOUT),一旦 STDOUT 有数据产生,就会将这些数据传输到另一个“设备”中,该 Docker 的被称为“日志驱动(Logging Driver)”

例如,我们有一个容器实例 ID 为 “da6743d61e1a” ,随后我们使用 docker logs 命令,查看 da6743d61e1a 容器的日志

此时,Docker 日志也在同步输出,输出的日志类似下面这样。

Docker 是怎样做到的呢?或者说,所谓的 Docker 日志驱动,到底做了些什么事情?

我们使用 docker info 命令,可以看到 Docker 容器的相关信息,其中有一项 Logging Driver 的字段。

通过输入以上命令,将得到Docker 当前所设置的日志驱动类型:journald

其实,Docker 已为我们提供了大量的日志驱动类型。

通过 --log-opt 参数为 json-file 日志驱动添加了两个选项,max-size=10m 表示 JSON 文件最大为 10MB(超过 10MB 就会自动生成新文件),max-file=3 表示 JSON 文件最多为3个(超过3个就会自动删除多余的旧文件)

除了在启动 Docker 容器时,可指定日志驱动以外,还可以通过修改 Docker 配置文件来指定日志驱动。

打开配置文件 /etc/sysconfig/docker ,找到以下配置片段:

可以看出,默认的日志驱动为 journald,把它修改为 syslog

然后重启 docker

以上众多日志驱动类型中,较为常用 的是 Syslog,因为 Syslog 是 Linux 的日志系统,很多日志分析工具都可以从 Syslog 中获取日志,比如流行的 ELK(Elasticsearch、Logstash、Kibana)日志中心。Logstash 用于收集日志,Syslog 中写入的日志可转发到 Logstash 中,随后将日志存入 Elasticsearch 中,最后可通过 Kibana 来查询日志。

接下来咱们的目标是将 Docker 容器中输出的日志写入 Syslog,那么后面需要做的就是将 Syslog 接入 ELK 了。

默认,Linux 操作系统已经安装了 Syslog 软件包,但它叫 Rsyslog。实际上,Rsyslog 是 Syslog 标准的一种实现,还有一种叫 Syslog-ng 的第三方实现。虽然 Syslog-ng 的功能较为强大,但我们还是选择使用 Rsyslog,因为操作系统已经预装了,我们无须单独安装,可以通过以下命令查看 Rsyslog 是否已安装。

如果要开启 Rsyslog 服务,我们必须对 Rsyslog 进行配置,打开文件 vi /etc/rsyslog.conf

在 rsyslog.conf 文件中有一段配置,我们需要手工去开启

重启 Rsyslog 服务,否则配置无法生效

此时,我们可以查看本地是否对外开启了 514 端口

以nginx.conf为例子

我们通常看到的日志都是输入到一个文件中,类似access.log,error.log。只要产生相关日志日志就会出现对应的文件中。

而我们在docker容器中,nginx.conf文件如下

supervisord.conf文件如下

可以看到日志并不是输出到一个文件内,而是 /dev/stdout 和 /dev/stderr 。它的作用就是日志输出docker日志中,而不输入到具体的文件中。docker日志就是使用以下命令在前台输入的内容

或者是我们docker前台启动后,输出的内容

如docker前台启动一样,日志也会输出到nginx前台启动,通过nginx二进制命令启动

nginx查看标准输出的日志通过前台启动时可以看到,其他服务也是一样,通过前台启动时即可查看到。

还有一个问题,就是起了一个容器后,该容器有nginx和php进程,而俩进程都是使用supervisord来守护进程的。nginx日志都可以在docker里面正常输出,当我有一个需求,需要开启定时执行任务。这时需要在dockerfile文件中新增CMD命令,因为dockerfile中只能执行一条CMD命令, 该命令就是容器的主进程 。所以我门既要保证原来的服务能正常启动,我们还要启动crontab。所以命令如下

如果执行上条命令的话,会报code为0的问题,表示容器退出,也就是后台启动完进程就退出了,所以容器也就没有存在的意义,也就退出了。所以我们加tail命令,tail可阻塞,挂起一个主进程,类似前台启动。

注意:这时意味着和之前相比,主进程发生了变化,也就意味着,此时nginx的相关日志就不会输出在docker前台了。可以想象成原来开启的是nginx服务,现在开启了一个mysql服务,nginx的相关日志信息也理所当然的不会出现在mysql的服务中了。

重要:如果使用CMD后改变主进程,类似nginx日志将不会输出到console,此时我们应该修改nginx的配置文件,让其log输出到文件中

一:首先来理解三个名词解释:

1、镜像(image)

Docker 镜像(Image)就是一个只读的模板。

例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

2、仓库(repository)

仓库(Repository)是集中存放镜像文件的场所。

3、容器(container)

Docker 利用容器(Container)来运行应用。容器是从镜像(Image)创建的运行实例。

二:常用的命令集合如下:

容器生命周期管理 — docker

[run|start|stop|restart|kill|rm|pause|unpause|create]

容器操作运维 — docker

[ps|exec|inspect|top|attach|events|logs|wait|export|import|port]

容器rootfs命令 — docker

[commit|cp|diff]

本地镜像管理 — docker

[images|rmi|tag|build|history|save]

镜像仓库 — docker

[login|pull|push|search]

其他命令 — docker

[info|version]

详细命令说明如下:

docker run -d --name alias-Name imageName //在后台启动一个容器

docker start Name/ID //启动容器

docker stop Name/ID //停止容器

docker restart Name/ID //重启容器

docker kill -s KILL Name/ID //杀死一个运行的容器

docker rm /rm -f Name/ID //删除容器

docker pause Name/ID //停止容器

docker unpause Name/ID //恢复容器

docker create --name CONTAINER_Name imageName //只创建容器但不启动

docker ps / docker ps -a //查看运行的容器

docker exec -it CONTAINER_ID /bin/bash //进行一个运行中的容器,开启一个新的终端

docker attach CONTAINER_ID //进行一个运行中的容器,不开启一个新的终端

docker inspect CONTAINER_Name //查看容器的相关信息

docker top CONTAINER_Name //查看容器里面的进程

docker events -f "image"="imageName" --since="1467302400" //时间戳=2016年7月1日后的相关事件

docker logs CONTAINER_Name //查看容器的日志输出

docker wait CONTAINER_Name //阻塞运行直到容器停止,然后打印出它的退出代码

docker export -o test.tar CONTAINER_ID //将容器进行打包保存到本地,文件类型为tar

cat test.tar |docker import - image_name:tag //将上面保存的文件导入到镜像库中

docker port CONTAINER_ID //查看容器的端口映射情况

commit 从容器中创建一个新的镜像

docker commit -a "tony test" -m "my mysql" CONTAINER_ID mymysql:v1

docker images mymysql:v1

cp 在使用的过程中会进行多个主机与容器之间的数据交换

docker cp /ruiqi/content CONTAINER_ID:/ruiqi/

diff 用来检查容器里面文件结构的更改

docker diff CONTAINER_ID

docker images /docker images -a //查看本地的镜像,-a 表示是所有的镜像

docker rmi -f image_name //删除镜像

docker tag mysql:v5.6 mysql:v5.7 //给镜像做一个有别名的复本

docker build -t runoob/ubuntu:v1 . //构建一个镜像

docker history image_name //查看当前这个镜像的 历史 信息

docker save -o TestFlask.tar TestFlask:v3 //将当前的镜像保存到本地的一个tar 类型的文件

docker login //登录镜像仓库

docker pull //从镜像仓库中拉镜像

docker push //向镜像仓库推本地的镜像文件

docker search //检索镜像内容

三:利用dockerfile 制作一个tomcat 运行image:

[root@localhost common]# more Dockerfile.tomcat

FROM

COPY jdk-8u144-linux-x64.rpm /opt/jdk-8u144-linux-x64.rpm

RUN ["rpm","-ivh","/opt/jdk-8u144-linux-x64.rpm"]

COPY security /usr/java/jdk1.8.0_144/jre/security

COPY certs /etc/pki/tls/certs

COPY tomcat /opt/tomcat

RUN ["ln","-s","/opt/tomcat","/usr/local/tomcat"]

docker日志存储位置,设置docker容器日志大小

在Linux系统中docker启动后日志存储在 /var/lib/docker/containers/容器ID/ 目录中,启动一个容器后,容器ID目录中会生成如下文件:

每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log 下,不过并不建议去这里直接读取内容,因为容器的日志则可以通过 docker logs 命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs <服务名> 来查看。

从上面可以知道docker容器日志存储在文件中,容器销毁后 /var/lib/docker/containers/<容器id>/ 目录会被自动删除,所以容器日志也被一并删除。如果容器一直运行并且一直产生日志,容器日志会导致磁盘空间爆满,如何解决这个问题?

新建 /etc/docker/daemon.json ,若有就不用新建了。添加log-dirver和log-opts参数,如下:

设置完成之后,需要删除容器,并重新启动容器,我们可以看到 /var/lib/docker/containers/<容器id>/hostconfig.json 文件的变化如下:

设置 log-opts 之前:

设置 log-opts 之后:

在k8s集群中docker容器日志 /var/lib/docker/containers/容器ID/ 目录的文件如下:

与docker容器目录相比少了一些文件:hostname、hosts、resolv.conf、resolv.conf.hash

k8s通过 sandbox(pause容器,关于pause容器的介绍可以查阅资料) 关联了这些文件,通过查看 cat config.v2.json 可以发现如下配置:

使用命令 cat /var/lib/docker/containers/<容器id>/hostconfig.json 查看 hostconfig.json 的内容,发现有如下设置:

查看 /etc/docker/daemon.json 发现有如下配置:

下面列出了一个容器的日志文件达到设置值的情况:

参考文档:

Docker 日志都在哪里?怎么收集?

Docker容器日志查看与清理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息