因为开发需要用到docker
的应用日志文件,本来是很简单的问题,老手可能一眼就能给出答案,但是作为刚学会docker
,命令也用的磕磕绊绊的人解决这个问题花了不少力气,但是在用搜索引擎对docker
理解更近一步,有时候用这种方式学习一项新技术往往事半功倍的。
搜索之旅
作为新手,我只知道docker logs 容器ID
用来看容器应用日志,但是这次需要日志文件地址。
先用搜索引擎搜索docker的应用日志地址,给出答案
/var/lib/docker/containers/容器ID/容器ID-json.log
但是我查了一下,没有这个文件夹,我就想应该是部署的人改了日志地址。我又开始查了怎么修改默认地址,查询到可以修改 /usr/lib/systemd/system/docker.service
在里面的EXECStart的后面增加 --graph 选项指定新目录
果然查到EXECStart
后面跟着
--graph=/data/docker
其实这里都不用这么麻烦查这个文件,直接docker info
即可
Docker Root Dir: /data/docker
就能查到日志地址。
我进入到这个目录,果然有containers
文件夹,然后进去一看,说是容器ID,但是看到的一大串类似乱码的文件夹,我就奇怪是不是进错了,我随便进了一个文件夹,发现里面是有日志,但是日志没东西,有时候运气就是这么差,刚好进入一个没日志的文件夹。我又开始自我怀疑,这样找日志地址对不对,是不是这样子找偏了。我一通找资料,突然觉得可以用docker inspect 容器ID
来看看信息,找一个属性LogPath
,
打开这个地址,终于找到了日志存储地址。然后我又开始疑惑了,为啥这个日志文件代表的容器ID字符特别长,但是使用docker ps
出现的容器ID就只有12位,很奇怪啊,虽然说前12位是一样的。
我又开始新一轮的搜索,找到了一个命令docker ps --no-trunc
,这个命令可以查看完整的容器ID,一打果然就对上了,搜索了一圈,终于解决了我的问题。虽然搜索的很幸苦,但是了解之前没有遇到过的知识,问题虽简单,收获却满满的。
额外的知识
我在搜索资料,也会看看相似的资料,同样收获了很多知识,比如修改数据存储地址,有两种方式
修改docker.service
1.vim /usr/lib/systemd/system/docker.service
在文本内容ExecStart=/usr/bin/dockerd 后面添加如下内容: --graph <your path>
如:
ExecStart=/usr/bin/dockerd --graph /home/docker --registry-mirror=https://registry.docker-cn.com
注:--registry-mirror=https://registry.docker-cn.com是修改docker镜像地址
2.systemctl daemon-reload
3.systemctl restart docker
4.重启docker服务
修改daemon.json
第二种修改/etc/docker/daemon.json
,这个文件没有可自己新建。
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"data-root": "/data/docker"
}
有些版本,data-root
要改成graph
,上面操作之后记得重启docker
systemctl restart docker
daemon.json
有很多配置,详情可访官网。
当然上面改了文件之后,还是要移动之前的数据文件,不然可能不能启动
# 使用mv命令
$ sudo mv /var/lib/docker /data/docker
# 使用cp命令
$ sudo cp -arv /data/docker /data2/docker