docker文件存放路径, 获取容器启动命令操作

容器早已创建好,如何得知它的启动参数(数据挂载到哪)

#假设通过如下命令启动了一个容器
docker run -d --name mysql\
-p 3306:3306\
-e MYSQL_ROOT_PASSWORD=123456\
--restart=always\
mysql:5.5 --character-set-server=utf8

#如何通过容器名得知启动参数
[root@jenkins ~]# docker inspect mysql_cdh
[
  {
    "Id": "fbc3fba81b57bc5b5871746098b5f1f7ef0ed7716a786584a5effbb88ba156e6",
    "Created": "2019-09-25T01:43:37.720505875Z",
    "Path": "docker-entrypoint.sh",
    "Args": [
      "--character-set-server=utf8"
    ],

 "HostConfig": {
      "Binds": [
        "mysql-data:/var/lib/mysql"
      ],
      "ContainerIDFile": "",
      "LogConfig": {
        "Type": "json-file",
        "Config": {}
      },
      "NetworkMode": "default",
      "PortBindings": {
        "3306/tcp": [{  "HostIp": "",  "HostPort": "3306"}
        ]
      },
      "RestartPolicy": {
        "Name": "always",
        "MaximumRetryCount": 0
      },

"Mounts": [
      {
        "Type": "volume",
        "Name": "mysql-data",
        "Source": "/var/lib/docker/volumes/mysql-data/_data",
        "Destination": "/var/lib/mysql",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
      }
    ],

1, 镜像层:文件存放路径

[root@master ~]# docker image inspect nginx |tail -n 22
    "GraphDriver": {
      "Data": {
        "LowerDir": "/var/lib/docker/overlay2/bf20cf788cc053f00ff1467525d50e19bd1cf07a2167f72511bdfcb28918a472/diff:/var/lib/docker/overlay2/317d80bb7ae58ed288be9ebd84aeb5b4b3a1c06f3211f5d1f32d89b629d1876e/diff",
        "MergedDir": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/merged",
        "UpperDir": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/diff",
        "WorkDir": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/work"
      },
      "Name": "overlay2"
    },

2, 容器层:文件存放路径

#1, 启动容器
[root@master ~]# docker run -d --name nginx2 nginx
a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8

#2, 获取容器id
[root@master ~]# docker inspect nginx2 | grep -i id
[root@master ~]# docker inspect nginx2 | grep -i id
    "Id": "a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8",
      "Pid": 2069,
    "ExecIDs": null,
      "ContainerIDFile": "",

#查看容器临时文件--每次创建时随机生成的文件(容器层)
[root@master ~]# docker inspect nginx2 | grep -i path
    "Path": "nginx",
    "ResolvConfPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/hostname",
    "HostsPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/hosts",
    "LogPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8-json.log",

#通过容器id, 查找容器数据存放目录: /var/lib/docker/overlay2/容器id
######
#对比上面的“镜像层:文件存放路径”,可以看到 :容器通过LowerDir 挂载的方式,映射了镜像层的文件
######
[root@master ~]# docker inspect nginx2 | grep -i dir
        "LowerDir": "/var/lib/docker/overlay2/d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b-init/diff:/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/diff:/var/lib/docker/overlay2/bf20cf788cc053f00ff1467525d50e19bd1cf07a2167f72511bdfcb28918a472/diff:/var/lib/docker/overlay2/317d80bb7ae58ed288be9ebd84aeb5b4b3a1c06f3211f5d1f32d89b629d1876e/diff",
        "MergedDir": "/var/lib/docker/overlay2/d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b/merged",
        "UpperDir": "/var/lib/docker/overlay2/d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b/diff",
        "WorkDir": "/var/lib/docker/overlay2/d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b/work"

后天修改容器端口

通过容器层文件,找到配置文件hostconfig.json,修改容器映射的端口

[root@docker d93185e3a0....2e544ccfa]# pwd
/var/lib/docker/containers/d93185e3a0....2e544ccfa
[root@docker d93185e3a0....2e544ccfa]# cat hostconfig.json
{"Binds":["/dockersuperset:/home/superset"],"ContainerIDFile":"",
"LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default",
"PortBindings":{"8088/tcp":[{"HostIp":"","HostPort":"8099"}]}......

3, 进入镜容器文件存储目录, 修改配置文件

# 进入镜容器文件存储目录, 修改配置文件
[root@master ~]# cd /var/lib/docker/overlay2/d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b
[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# ls
diff link lower merged work

[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# ls diff/run/
nginx.pid
[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# ls diff/var/cache/nginx/
client_temp fastcgi_temp proxy_temp scgi_temp uwsgi_temp

[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# ls merged/
bin/    dev/    etc/    lib/    media/   opt/    root/    sbin/    sys/    usr/
boot/    .dockerenv home/    lib64/   mnt/    proc/    run/    srv/    tmp/    var/    

[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# ls merged/etc/nginx/
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf

[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# head merged/etc/nginx/nginx.conf
user nginx;
worker_processes 1;

#在此处修改配置文件,把user nginx; worker_process 1; 这两行的分号去掉,看容器里面的配置是否更改
[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# head merged/etc/nginx/nginx.conf -n 3
user nginx
worker_processes 1

#登陆容器,查看修改的配置: 验证是否生效
[root@master d37ff828e63081be6fcfefc73891e7b455596cb921c8021fbf9571f330c0599b]# docker exec -it nginx2 bash
root@a9c9f31cdccf:/# head /etc/nginx/nginx.conf -n 3
user nginx
worker_processes 1

4, 修改默认存储路径

a, 重建/var/lib/docker目录
#备份数据到新的存放路径
service docker stop
mkdir /docker.bak
mv /var/lib/docker/* /docker.bak

#创建软连接
mkdir /home/docker-data
mv /docker.bak/* /home/docker-data/ && rmdir /docker.bak
ln -s  /home/docker-data /var/lib/docker
b, 修改配置
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph /new-path/docker 

#reload配置文件
systemctl daemon-reload
#重启docker
systemctl restart docker.service

补充知识:Docker 指定数据储存目录

Docker 指定储存目录(原参数 --graph 已经失效 。)

方法一

一、在 Docker 配置文件中配置 /etc/docker/daemon.json

下面的命令是在 daemon.json 文件没有内容的时候进行添加的。如果有内容,就需要

cat << EOF >>/etc/docker/daemon.json
{
  "data-root": "/mnt/docker-data"
}
EOF
systemctl restart docker

方法二

二、在启动参数中配置

vim /usr/lib/systemd/system/docker.service

在里面的EXECStart的后面增加后如下:

ExecStart=/usr/bin/dockerd --data-root='/home/docker'
systemctl daemon-reload
systemctl restart docker

以上这篇docker文件存放路径, 获取容器启动命令操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    从docker hub下载了一个es的镜像,版本为6.4.2,详细信息如下: 比较重要的就是这两条,第一个是工作目录,挂载目录也需要和这里对应:第二个是启动命令,这里是指定了一个预先写好的启动脚本.所以我启动了一个空容器去查看了下容器内的情况: 容器内部目录结构如上图,data是用来存放数据,logs用来存放日志. 接着查看下启动脚本 /usr/local/bin/docker-entrypoint.sh 前半部分我也是看的一知半解,不过真正和挂载目录相关的是最后这部分,这里处理了挂载目录后的操

  • 解决docker加载新的镜像后repository和tag名称都为none的问题

    可以使用命令: docker tag [image id] [name]:[版本] 例如: docker tag b03b74b01d97 docker-redis:0.0.1 补充知识:docker的save和load 我就废话不多说了,大家还是直接看代码吧~ 实战 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE clearlinux latest 32685d114002 7 days ago 62

  • 在docker下删除两个id相同的镜像的操作

    今天建立docker容器的时候由于疏忽,镜像的名字输错了,结果容器创建成功后,镜像中出现两个id相同的: 使用docker rmi e4a35914679d删除的时候执行失败: Error response from daemon: conflict: unable to delete e4a35914679d (must be forced) - image is referenced in one or more repositories 提示应该是该id有两个本地文件,不能用id删除. 所

  • docker版es、milvus、minio启动命令详解

    1.es启动命令: docker run -itd -e TAKE_FILE_OWNERSHIP=1111 -v /data/elasticsearch/data:/usr/share/elasticsearch/data -p 9200:9200 --name es elasticsearch:6.4.2 需要添加环境变量 TAKE_FILE_OWNERSHIP,值随意. 含义请参考我的另一篇文章://www.jb51.net/article/200198.htm 挂载目录用来存储es的数据.

  • docker实现重新打tag并删除原tag的镜像

    docker镜像id是唯一的,可以物理性的标明一个镜像,repository:tag可以有多个,但是也不会重复,也是唯一的. 要重新打tag的话,语法是: docker tag imageId repository:newTag 比如将这个centos:7重新打tag为centos7:base 此时仓库中有两个镜像,镜像id相同,只是多了一个tag标签,也就是多了一个引用.删除不需要的引用即可,删除时必须用tag删除,用镜像id删除会物理性的删除镜像,这两个引用会同时被删除掉. 当然,打tag的

  • Linux下docker 容器退出bash的两种实现方法

    如果要退出bash有2种操作: 第一种: Ctrl + d 退出并停止容器: 第二种: Ctrl + p + q 退出并在后台运行容器: 补充知识:Docker同时启动多个服务 前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务 1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下 FROM centos:centos6MAINTAINER Fanbin Kong "kongxx@hotmail.com&quo

  • 一条命令重启所有已停止的docker容器操作

    一条命令重启所有已停止的docker容器 docker ps -a | grep Exited 查看所有已停止的容器 docker ps -a | grep Exited | awk '{print $1}' 获取已停止容器的ID docker ps -a | grep Exited | awk '{print $1}' |xargs docker start 把获取到的已停止容器的ID传送给容器启动命令 一条命令停止所有运行中的docker容器 docker ps -a | grep Up |

  • docker文件存放路径, 获取容器启动命令操作

    容器早已创建好,如何得知它的启动参数(数据挂载到哪) #假设通过如下命令启动了一个容器 docker run -d --name mysql\ -p 3306:3306\ -e MYSQL_ROOT_PASSWORD=123456\ --restart=always\ mysql:5.5 --character-set-server=utf8 #如何通过容器名得知启动参数 [root@jenkins ~]# docker inspect mysql_cdh [ { "Id": &quo

  • docker 文件存放路径, 修改端口映射操作方式

    如何获取容器的启动命令 容器早已创建好,如何得知它的启动参数(数据挂载到哪) #假设通过如下命令启动了一个容器 docker run -d --name mysql_cdh \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v mysql-data:/var/lib/mysql \ --restart=always \ mysql:5.5 --character-set-server=utf8 #如何通过容器名得知启动参数 [root@jenki

  • Docker在线、离线安装及其常用命令操作

    一.测试环境 名称 版本 centos 7.6 docker 18.09.06 二.在线安装 这里采用yum源命令安装前期准备的依赖包,包括yum-utils.device-mapper-persistent-data.lvm2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 因为官方镜像仓库网速较慢,在此设置阿里云镜像代理,以便快速下载.上传镜像. sudo yum-config-manager --add-re

  • java获取文件编码,jsoup获取html纯文本操作

    maven引入获取编码的jar <dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>67.1</version> </dependency> 获取文件编码 package com.lovnx.note.util; import com.ibm.icu.text.CharsetDetector; i

  • python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)

    在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠) 引言 由于win10电脑自带的获取文件路径为双引号括起来的单反斜杠,如下图. "D:\sankey.html" 但是在很多程序里读取文件的时候,文件路径中的反斜杠是会作为反编译的特殊符号,所以无法直接读取该路径 例如在R语言中,读取数据只能用斜杠"/",或者是双反斜杠"\\". 每次在R里读表都很麻烦,要不只能手输,要不用系统自带的路径,然后一个一个加反斜杠. 像我这么懒的人,对于

  • Docker实践之python应用容器化

    一.前言 容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性.本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建自动化以及docker神器compose. 二.编写Dockerfile文件 官网下载的python镜像比较精简,web应用相关依赖还是需要自己安装的.编写Dockerfile,可以让你构建镜像的时候自动化.实例如下: FROM python:3.6.4 RUN mkdir /code

  • 详解Shell脚本控制docker容器启动顺序

    1.遇到的问题 在分布式项目部署的过程中,经常要求服务器重启之后,应用(包括数据库)能够自动恢复使用.虽然使用docker update --restart=always containerid能够让容器自动随docker启动,但是并不能保证是在数据库启动之后启动,如果数据库未启动,那么将导致应用启动失败;网上还有一种解决方法是通过docker-compose容器编排来控制启动顺序,这个博主研究的比较少. 2.解决思路 使用Shell脚本来控制,思路大致如下 探测数据库端口来检验数据库是否启动成

  • Docker 解决获取容器获取的时间不是本地时间的问题

    docker 获取容器获取的时间出错问题解决: 在使用Docker部署网站的时候,无意间发现容器里面的时间竟然是美国时间,被雷到了,不过解决办法也很简单,有两种办法 1.重新启动一个容器,加上如下参数,即可使用宿主机时间 $ -v /etc/localtime:/etc/localtime:ro # docker run -d -v /etc/localtime:/etc/localtime:ro [image] 2.假如,你不想重新启动,或者不能重新启动,也没关系,可以直接把文件复制到容器内,

  • SpringBoot+Docker+IDEA 实现一键构建+推送、运行、同镜像多容器启动(推荐)

    场景: 由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐.最近正好在学习Docker,利用Docker容器做部署尝试 需求: 使用Docker部署服务 支持idea插件,一键操作构建.推送镜像.运行 单个镜像需根据不同端口部署多个容器 日志持久化 必要软件 服务器(我的版本为CentOS:7.9) Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密) Harbor 镜像仓库(可选) 开发端 Docker Desktop (支持本地运行

  • SpringBoot+Docker+IDEA实现一键构建+推送、运行、同镜像多容器启动

    场景: 由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐.最近正好在学习Docker,利用Docker容器做部署尝试 需求: 使用Docker部署服务 支持idea插件,一键操作构建.推送镜像.运行 单个镜像需根据不同端口部署多个容器 日志持久化 必要软件 服务器(我的版本为CentOS:7.9) Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密) Harbor 镜像仓库(可选) 开发端 Docker Desktop (支持本地运行

随机推荐