当前位置:   article > 正文

Docker命令-快速开始_docker start

docker start

Docker使用-快速开始

一、 常见基本操作

1. 拉取docker镜像

  • 拉取镜像
docker pull [OPTIONS] NAME[:TAG]
  • 1
docker pull hello-world
  • 1
  • 查看本机都有哪些镜像
docker images
  • 1

2. Docker 容器镜像删除

停止所有的container,这样才能够删除其中的images

docker ps -a 检查对应的镜像id进程和核实进程是否存在
docker rm f0b 删除对应容器id进程
docker rmi 116  删除对应的镜像id
docker images 检查镜像是否还存在
  • 1
  • 2
  • 3
  • 4

查看镜像列表

docker images 
  • 1

然后根据镜像id IMAGE ID,执行如下命令进行删除

docker rmi 8397388696e1
  • 1

3. 运行docker容器

  • 运行容器
    docker run [OPTIONS] IMAGE[:TAG][COMMAND][ARG…]
docker run hello-world
  • 1
  • 查看当前正在运行的容器
docker ps
  • 1

看不到hello-world了:
hello-word它就是一个打印,打印完了,程序就结束了。进程就看不到了。。

4. 持久运行容器nginx

拉取镜像

docker pull hub.c.163.com/library/nginx:latest
  • 1

在前台启动镜像

docker run hub.c.163.com/library/nginx
  • 1

后台运行镜像,加 -d参数即可

docker run -d hub.c.163.com/library/nginx
  • 1

在容器中运行一个命令,进入容器内部等
docker exec -it d4容器的id,可以只写前面一部分,只要docker能唯一的确定这个容器 bash要在容器中运行的命令,这里是bash就是给你一个bash环境。

docker exec -it d4 bash
  • 1

多使用 --help查看命令参数含义 docker exec --help等

二、Docker网络

Bridage Host None
Docker网络入门(一) – 默认设置
参考URL: http://dockone.io/article/458
理解Docker(5):Docker 网络
参考URL: https://www.cnblogs.com/allcloud/p/7150564.html
“深入浅出”来解读Docker网络核心原理
参考URL: http://blog.51cto.com/ganbing/2087598
[推荐-讲的比较清晰]Docker Network入门用法
参考URL: https://loocode.com/post/10107

1. docker网络基础

libnetwork共有5种内置驱动:bridge驱动、host驱动、overlay驱动、remote驱动、null驱动。
1、bridge驱动
此驱动为Docker的默认设置驱动,使用这个驱动的时候,libnetwork将创建出来的Docker容器连接到Docker网桥上。**作为最常规的模式,bridge模式已经可以满足Docker容器最基本的使用需求了。**然而其与外界通信使用NAT,增加了通信的复杂性,在复杂场景下使用会有诸多限制。

2、host驱动
 使用这种驱动的时候,libnetwork将不为Docker容器创建网络协议栈,即不会创建独立的network namespace。Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器和宿主机共同用一个network namespace,使用宿主机的网卡、IP和端口等信息。

但是,容器其他方面,如文件系统、进程列表等还是和宿主机隔离的。host模式很好地解决了容器与外界通信的地址转换问题,可以直接使用宿主机的IP进行通信,不存在虚拟化网络带来的额外性能负担。但是host驱动也降低了容器与容器之间、容器与宿主机之间网络层面的隔离性,引起网络资源的竞争与冲突。
 因此可以认为host驱动适用于对于容器集群规模不大的场景。

3、overlay驱动
 此驱动采用IETE标准的VXLAN方式,并且是VXLAN中被普遍认为最适合大规模的云计算虚拟化环境的SDN controller模式。在使用过程中,需要一个额外的配置存储服务,例如Consul、etcd和zookeeper。还需要在启动Docker daemon的时候额外添加参数来指定所使用的配置存储服务地址。

4、remote驱动
 这个驱动实际上并未做真正的网络服务实现,而是调用了用户自行实现的网络驱动插件,使libnetwork实现了驱动的可插件化,更好地满足了用户的多种需求。用户只需要根据libnetwork提供的协议标准,实现其所要求的各个接口并向Docker daemon进行注册。

5、null驱动
 使用这种驱动的时候,Docker容器拥有自己的network namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器除了network namespace自带的loopback网卡名,没有其他任何网卡、IP、路由等信息,需要用户为Docker容器添加网卡、配置IP等。
 这种模式如果不进行特定的配置是无法正常使用的,但是优点也非常明显,它给了用户最大的自由度来自定义容器的网络环境。

  • 使用docker network ls 可以查看这台主机上的所有Docker网络
# docker network  ls
NETWORK ID          NAME                DRIVER              SCOPE
879f8d1788ba        backend             bridge              local
6c16e2b4122d        bridge              bridge              local
d150ba23bdc0        frontend            bridge              local
  • 1
  • 2
  • 3
  • 4
  • 5

这3个网络是Docker daemon默认创建的,分别使用了3种不同的驱动,而这3种驱动则对应了Docker原来的3种网络模式。需要注意的是,3种内置的默认网络是无法使用docker network rm进行删除的。

如果Docker容器不是使用none网络模式,默认是不需要再做任何配置就可以访问网络。但是,外部网络在默认情况下是不能访问容器的服务的

Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用。

2. 容器访问外部世界

容器默认就能访问外网。
我们查看一下 docker host (宿主机)上的 iptables 规则

iptables -t nat -S
  • 1

返回结果:
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
其含义是:! -o docker0 的意思是所有目标地址不是docker0的数据包(即访问外网)。这条规则是指:容器内部访问外网的包,会做NAT,然后通过host的网卡(比如enp0s3)发出去。

通过 NAT,docker 实现了容器对外网的访问。

3. 外部世界如何访问容器

从外部访问Docker
参考URL: https://blog.csdn.net/CSDN_LYY/article/details/70187663

在使用Bridge时,利用端口映射,使容器内的某个端口与容器所在主机上的某个端口做映射,当你访问主机的某个端口其实就是访问容器里面的映射的端口。

默认情况使用Bridage模式,默认我们没有告诉它端口怎么映射,所以我在主机上访问不到容器里面的端口。
因此使用,如下方法,添加映射,注意先停止容器。

使用docker run --help查看参数说明
主要是 -p手动指定
docker -d -p 8080主机的端口:80容器的端口 容器的名字

docker ps
docker stop dc60e24c907a
docker run -d -p 8080:80 hub.c.163.com/library/nginx
  • 1
  • 2
  • 3
docker run -d -P --expose 443 nginx
  • 1

-P选项Docker会把Dockerfile中的通过EXPOSE指令或–expose选项暴露的端口随机映射到临时端口。默认的nginx镜像的Dockerfile中会 EXPOSE 80。

查看端口映射关系

docker port 7101c41b0ca2
80/tcp -> 0.0.0.0:32773
443/tcp -> 0.0.0.0:32772
许多Linux内核预设的临时端口范围为32768 ~ 61000,你可以通过cat /proc/sys/net/ipv4/ip_local_port_range查看临时端口范围。

3.1 docker for windows 容器内网通过独立IP直接访问的方法

[推荐]docker for windows 容器内网通过独立IP直接访问的方法
参考URL: https://www.cnblogs.com/brock0624/p/9788710.html

以下在win10环境中队Docker容器通过独立IP暴露给局域网的方法进行记录。

Docker的默认启动方式中,会产生一块虚拟网卡,然后容器内自行分配单独的网卡和IP。可以在宿主机上通过ipconfig命令看到这个虚拟网卡。
在这里插入图片描述

通过配置路由表实现ip互通
C:\windows\system32>route -p add 172.17.0.0 MASK 255.255.0.0 10.0.75.2

由于docker默认采用bridge网络,每次容器启动时自动分配ip,我们可以创建自己的网络bridge1,在创建容器时指定ip,如需独立ip访问则另外增加路由。


route -p add 172.18.12.0 MASK 255.255.255.0 10.0.75.2

如果删除路由:
route delete 172.18.12.0

示例:

route -p add 172.17.0.0 MASK 255.255.0.0 10.0.75.2
route -p add 192.168.130.0 MASK 255.255.255.0 10.0.75.2
  • 1
  • 2

问题:理论上我网关应该设置成10.0.75.1,测试发现不行,设置成10.0.75.2,发现可以ping通容器ip。why?
猜测,应该是10.0.75.1是暴漏给windows的,真正windows下管理容器的是mobylinux,10.0.75.2应该是mobylinux。
在 linux 下,路由网关设置成10.0.75.1 应该就可以实现,宿主机访问容器ip,待测试。

4. Docker自定义网络和运行时指定IP

启动Docker容器的时候,使用默认的网络是不支持指派固定IP的。
因此,需要创建自定义网络,下面是具体的步骤:

步骤1: 创建自定义网络
docker network create --subnet=192.168.130.0/24 mynetwork
通过docker network ls可以查看到网络类型中多了一个mynetwork

步骤2: 使用新的网络类型启动容器
docker run 加参数 --net mynetwork --ip 192.168.130.1

这个时候,创建的Docker容器就会持有 192.168.130.1 这个IP.

5. docker run --link的作用

关于对docker run --link的理解
参考URL: https://www.jianshu.com/p/21d66ca6115e
docker 基于link 的互联
参考URL: https://blog.csdn.net/u013043762/article/details/80819473

–link的格式:
–link :alias
其中,name和id是源容器的name和id,alias是源容器在link下的别名。

docker间常常需要互联或者说通信,比如后台程序访问数据库容器,一般是需要ip+端口的形式,然而ip是经常会变化的,docker中采用link来为容器起个名字,以后访问只要名字+端口就行了,这样减少了ip访问下,ip常发生变化而导致的问题

默认情况下,容器使互联的。
docker 默认使允许container 互通的,通过-icc=false 关闭互通。一旦关闭了互通,只能通过-link name:alias 命令连接指定container .
–link redis:db 的别名,会在/etc/hosts 中生成对应的IP映射

注意!docker官方已不推荐使用docker run --link来链接2个容器互相通信,随后的版本中会删除–link,但了解其原理,对如何使2个容器之间互相通信还是有帮助的。

二、常见问题整理

1. docker run 与docker start的区别?

参考URL: https://www.cnblogs.com/gaoyuechen/p/9094477.html
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。

因为容器的ID是随机码,而容器的名字又是看似无意义的命名,我们可以使用命令

docker rename  old_name new_name
  • 1

给这个容器命名。这样以后,我们再次启动或停止容器时,就可以直接使用这个名字。

docker [stop] [start]  new_name
  • 1

而要显示出所有容器,包括没有启动的,可以使用命令
docker ps -a

2. 容器无ifconfig和ping命令的解决

Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令
解决:
apt-get update
apt install net-tools # ifconfig
apt install iputils-ping # ping

3. 容器中使用iptables报错can’t initialize iptables table Permission denied (you must be root)?

参考URL: https://blog.csdn.net/styshoo/article/details/78279762
解决方法
在启动容器时加上对应的privileged参数。

docker run --privileged  -d -p 8080:80 hub.c.163.com/library/nginx
  • 1

三、常见命令或常见使用场景示例

1. docker实时查看日志

docker logs -f -t 881f151e6bcb7df2a59a7b05904156bccd952cca106201664d216c7be84e439a
  • 1

实时查看docker容器日志
$ docker logs -f -t --tail 行数 容器名

例:实时查看docker容器名为s12的最后10行日志
$ docker logs -f -t --tail 10 s12

2. docker run --restart选项 容器的重启策略

Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。
Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。

创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。
现在要添加该参数怎么办呢,如下

docker container update --restart=always 容器名字
  • 1

Docker容器的重启策略如下:

no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
  • 1
  • 2
  • 3
  • 4
  • 5

Docker容器的退出状态码

docker run的退出状态码如下:

0,表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
    125,Docker守护进程本身的错误
    126,容器启动后,要执行的默认命令无法调用
    127,容器启动后,要执行的默认命令不存在
    其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

需要更新运行中容器的restart策略,可以使用该命令:
···
docker update --restart=no my-container
···

3. Docker inspect 获取容器/镜像的元数据

Docker inspect 命令
参考URL: https://blog.csdn.net/zl1zl2zl3/article/details/80676830

docker inspect : 获取容器/镜像的元数据。
-f :指定返回值的模板文件。

4. 仓库下载centos并使用仓库下载centos并使用

docker search centos
docker pull centos
docker images
  • 1
  • 2
  • 3

使用一下centos的镜像

docker run centos echo hello world
  • 1

查看一下最后一条容器记录信息(-l参数 ) 不加参数,就是查看当前运行容器。

docker ps -l
  • 1

登录docker中的CentOS7

docker run -ti centos /bin/bash
  • 1

5. 进入到docker容器镜像内部

(1)查看容器id(container ID) docker ps -a
(2)进入到容器内部 docker exec -it 6b654059476e /bin/bash
-it参数后面是容器的id

6. docker命令拷贝本地文件到docker容器

查找所有容器

docker ps -a
  • 1

找出我们想要的容器名字
查找容器长ID

docker inspect -f '{{.ID}}' modest_ritchie
  • 1

在这里插入图片描述

docker cp 本地路径 容器长ID:容器路径
docker cp E:\docker\jdk-8u191-linux-x64.tar.gz 8ce69425726ad53158e35b414e464cd73b0024e8b7543eaa05925a25b73a9a73:/
  • 1
  • 2

如下看到正常放置进去了
在这里插入图片描述

7. 基于Docker构造centos-java8镜像基于Docker构造centos-java8镜像

【PRACTISE】基于Docker构造centos-java8镜像
参考URL: https://blog.csdn.net/lingchaoqing/article/details/81198586
利用centos:7.5.1804 构建Java基础镜像
参考URL: https://blog.csdn.net/nie312122330/article/details/81563015
制作jdk基础镜像
参考URL: https://blog.csdn.net/chenhaifeng2016/article/details/78631215

除了使用dockerfile,然后使用docker build制作镜像,我们可以手动运行容器,登录docker容器配置好所有配置后,(可以将更改后的容器提交,制作成镜像)直接制作好自己想要的基础镜像。
因为是制作基础镜像,个人比较喜欢此方法。

mkdir /usr/java
cp jdk-8u191-linux-x64.tar.gz /usr/java/
cd /usr/java/
tar -zxvf jdk-8u191-linux-x64.tar.gz
#得到文件夹jdk1.8.0_191
cd jdk1.8.0_191
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行vim /etc/profile,在文件末尾输入以下几行
#添加如下内容:JAVA_HOME根据实际目录来
export JAVA_HOME=/usr/java/jdk1.8.0_191
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

运行source /etc/profile,使/etc/profile文件生效
运行java -version或echo $JAVA_HOME

至此已经完成了jdk8的配置。
docker commit :从容器创建一个新的镜像。
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

docker commit -a "shepf" -m "jdk1.8 add" 8ce69425726a centos:v1
docker images
  • 1
  • 2

再次查看镜像,发现镜像centos:v1已经提交到本地了
在这里插入图片描述

docker push [OPTIONS] NAME[:TAG]
目前上传本地镜像到网上有多种途径,一个是上传到hub上,一个是阿里云镜像仓库,还要其他服务器。
上传到hub上实在是太慢了,我的服务器用的是阿里云,所以选择上传到阿里云镜像仓库中。

  • 命令行登录到阿里云的doker仓库,–username为阿里云的用户名
    shepf2018 为阿里云镜像仓库的用户名。
    登录registry的用户名是您的阿里云账号全名,
    你可以在镜像管理首页点击右上角按钮(设置Registry登录密码)修改docker login密码。
docker login --username=shepf2018 registry.cn-hangzhou.aliyuncs.com
  • 1
  • 为本地镜像添加tag
    docker tag 镜像id registry.cn-hangzhou.aliyuncs.com/你设置你的仓库命名空间/centos:v1
docker tag 5eb755cf1b36 registry.cn-hangzhou.aliyuncs.com/shepf/centos:v1
  • 1
  • push到docker仓库
docker push registry.cn-hangzhou.aliyuncs.com/shepf/centos:v1
  • 1
  • 登录阿里云查看已上传的镜像列表:https://cr.console.aliyun.com/#/imageList

8. 创建最小Java8 Docker镜像(未测试)

参考URL: https://blog.csdn.net/hknaruto/article/details/70241618
Alpine Linux 使用简介
参考URL: https://blog.csdn.net/CSDN_duomaomao/article/details/76152416
Docker之操作系统Alpine
参考URL: https://blog.csdn.net/bbwangj/article/details/81088231

Alpine 由非商业组织维护的,支持广泛场景的 Linux发行版,它特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。

TODO 预研大厂 的基础镜像 都是基于哪个linux,是apline么?

9. Docker目录挂载

关于Docker目录挂载的总结
参考URL: https://www.cnblogs.com/ivictor/p/4834864.html

挂载目录后镜像内就可以共享宿主机里的文件
通过 run -v 参数指定挂载目录(格式:宿主机目录:镜像内挂载目录),如果宿主机目录不存在则创建
Centos7 中本地挂载的目录在容器中没有执行权限,通过 --privileged=true 给容器加特权

docker run -it -v /home/dockershare/data:/data centos
此时可看到宿主机上 /home/dockershare/ 文件夹下多出了 /data 目录
因为通过 -it 参数,已进入容器内部,通过 ls -a 命令查看文件夹,可看见多出 /data 目录,通过 cd 命令进入文件夹下并新建文件 touch a.txt
可看见宿主机 /data 目录也会存在该文件

window环境 IDEA docker插件配置映射路径
在这里插入图片描述在这里插入图片描述第一步
idea->setting->docker 配置path mapping 该配置指你的window的路径与你本地安装的运行docker的linux主机的映射关系(安装docker默认安装该linux,docker是基于linux的技术)
第二步
在具体的容器的配置项,中编辑volumn bindings中添加,容器中的路径到你的真实主机的路径,选择host path,就可以看到,您直接已经映射到了docker宿主机的路径,选择一个即可。

注意点:
使用idea docker插件时,在创建容器之前就需要把bind mount如下图,写好
在这里插入图片描述然后在创建好的容器,右边的配置项中看到你的volume bindings的配置
在这里插入图片描述

经过测试
注意点:如何一个容器不是你idea docker插件启动的(比如你命令行启动的容器),idea插件虽然看可以看到,但是你就不能编辑这个容器的配置,即使再右边编辑了,也不会生效。直接在容器上右键弹不出编辑配置界面。
如果这个容器是你用idea启动的,那么就可以改映射端口之类,改完,直接就生效了,不用你手动重启容器,idea插件帮你做了。

总结: windows下映射,相当于window先映射路径到docker宿主机上,让后docker宿主机再映射到docker容器中。

10. Docker内如何访问本机(宿主机)

Docker内如何访问本机(宿主机)
参考URL: https://blog.csdn.net/u010416101/article/details/80534013

有时候就需要在docker容器里访问宿主机提供的服务。
例如容器里的应用需要访问宿主机的mysql服务。
一般每个容器,都会映射一个端口到宿主机中,方便在宿主机上访问,例如ngnix,mysql,redis等等。

但是我们有一种常见的场景,就是a容器,需要通过宿主机的端口映射,调用b容器的服务,这里如果在a容器内部配置localhost/127.0.0.1/0.0.0.0:port都是不会起作用的,因为容器和容器之间的ip是隔离的,无法互相通过本地端口访问。

容器和容器之间的ip是隔离的,无法互相通过本地端口访问。

Docker内需要访问本机的数据库,如何访问。使用127.0.0.1肯定是不行的,因为这个在Docker容器里面指的是容器本身。所以,需要走别动渠道进行解决。

docker内部实际上实现了一个虚拟网桥docker0,需要通过网桥找到外部宿主机的在网桥的虚拟地址,也就是docker.for.mac.host.internal,就可以实现容器内访问外部宿主机。

[推荐]方案一:
宿主机执行ifconfig
会看到docker0那个ip,可以使用来访问宿主机

注意:有些容器不带ifconfig,所以需要yum安装
想看到docker容器的ip地址,只需要安装net-tools就可以了,之后就可以用ifconfig查看了

yum install net-tools -y
  • 1

方案二:
docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal来访问主机
Use your internal IP address or connect to the special DNS name host.docker.internal which will resolve to the internal IP address used by the host.

方案三:
/sbin/ip route|awk ‘/default/ { print $3 }’
得到的宿主机ip, 加上对应的端口,就可以访问其他容器的服务了

10.1 window环境下

在windows上使用的docker环境,发现使用ifconfig 看不到docker0,坑点,注意理解docker网络,应该是在宿主机上ifconfig查看,我在容器里面自然看不到这个接口,容器主机看到自然只有自己的ip。

docker0 网桥默认的是172.17.0.1
在windows下使用如下命令查看网络

$docker network ls
$docker network inspect bridge
  • 1
  • 2

docker0只是默认172.17.0.1,这个是默认得一个桥接网卡。

win10中
Docker的默认启动方式中,会产生一块虚拟网卡,然后容器内自行分配单独的网卡和IP。可以在宿主机上通过ipconfig命令看到这个虚拟网卡(dockerNAT)。
** 暴露给宿主机的为10.0.75.1 **
经过测试,使用10.0.75.1 内部容器还是访问不到宿主机上映射的其它容器(mysql)的端口。

总结: window环境,查看保留给容器主机的ip,应该是ipconfig 查看到的dockerNAT接口地址。
window比较特殊,永远记住,真正的docker运行在linux下,windows下真正的宿主机还是在linux,所以一些细节点比较特殊。

在Linux环境使用docker0接口ip,就可以访问到主机。
但是 mac 和 windows 开发环境下不会出现这个网卡也没有这样一个 IP 来访问,不过最新的 docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal hostname 来访问主机,解析得到的 ip 是 192.168.65.2 正是 docker 的设置中的子网网段。

详情参考官方文档:
https://docs.docker.com/docker-for-mac/networking/#there-is-no-docker0-bridge-on-macos
https://docs.docker.com/docker-for-windows/networking/#httphttps-proxy-support 关键字 “There is no docker0 bridge on Windows”

Because of the way networking is implemented in Docker for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.

I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST
The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker for Windows.

The gateway is also reachable as gateway.docker.internal.

官网已经说的很明白了,window下 推荐使用一个特殊dns host.docker.internal来访问宿主机。仅仅用于开发目的,生产环境不能这么用。

10.2 linux环境下

在 Docker 容器中访问主机
[]参考URL: https://rabbit52.com/2018/05/access-host-from-docker-container/

有时候多个容器不是在一个 compose 中启动的,不方便 link 起来或者是有些服务是直接跑在主机上的,所以从容器访问主机的场景十分普遍,我们需要一个类似 127.0.0.1 的 IP 地址能在容器中访问到主机。在 linux 环境中这个问题很好解决,安装完 docker 之后会出现一个 docker0 的网卡,这个网卡上绑定的 IP 就可以在容器中访问,并指向主机,默认情况下会是 172.17.0.1

11. 查看docker 里某个容器的的启动命令

1、在容器外部,物理机上,可以用docker inspect查看或者,docker inspect container。
2、如果在容器内部。可以用 ps -fe 查看。其中1号进程就是启动命令。

12. 修改Docker容器启动配置参数

有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动,

现在要添加该参数怎么办呢,方法有二:

1、Docker 命令修改

docker container update --restart=always 容器名字

2、直接改配置文件

首先停止容器,不然无法修改配置文件

配置文件路径为:/var/lib/docker/containers/容器ID

在该目录下找到一个文件 hostconfig.json ,找到该文件中关键字 RestartPolicy

修改前配置:“RestartPolicy”:{“Name”:“no”,“MaximumRetryCount”:0}

修改后配置:“RestartPolicy”:{“Name”:“always”,“MaximumRetryCount”:0}

最后启动容器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/461393
推荐阅读
相关标签
  

闽ICP备14008679号