天天看点

docker 容器修改--以修改sense镜像为例

Docker 容器修改--以修改 Sense 镜像为例

通过学习本文可以了解到docker容器基础操作命令、修改容器中信息和容器打包镜像。本文就以修改镜像

s12v/sense

为例进行演示。

说明:

s12v/sense

镜像是无需配置

ElasticSearch

地址的客户端,通过其可以连接到任意

ElasticSearch

单机或集群,相对于

kibana

有着独特的优点,但在未进行处理时连接 ElasticSearch 高版本时会出现问题,具体原因是在发生 http 请求时请求头设置不正确,需要修改文件

/opt/kibana/optimize/bundles/commons.bundle.js

。接下来将一步一步完成修改。

  1. 拉取镜像
# 拉取镜像
sudo docker pull s12v/sense
           
  1. 启动镜像
# 启动
sudo docker run --name sense  -p 15601:5601 -d s12v/sense
           
  1. 访问是否启动正常

启动后等待一小会,访问地址:

http://localhost:15601/app/sense

,我们可以看到界面:

docker 容器修改--以修改sense镜像为例

说明我们启动成功了。现在在

Server

输入 es 地址,如下图所示:

docker 容器修改--以修改sense镜像为例

点击 “执行”后可看到右侧报错

Content-Type header [application/x-www-form-urlencoded; charset=UTF-8] is not supported

从中可以看到,容器以正常启动,但使用其进行 es 操作时会报错,综上所述,在不进行任何修改的

s12v/sense

镜像连接高版本 es 时是会报不支持的请求头错误。

查看请求信息:

docker 容器修改--以修改sense镜像为例

从上我们可知道

commons.bundle.js

存在问题,接下来需要我们进行修改 js 文件。

  1. 修改容器

首先进入容器并搜索文件

commons.bundle.js

#  进入docker内   容器id
sudo docker exec -it e3ad9ff8e54c /bin/bash

# 搜索文件
find / -name commons.bundle.js
           

结果如下:

[[email protected] /]# sudo docker exec -it e3ad9ff8e54c /bin/bash
[email protected]:/# find / -name commons.bundle.js
/opt/kibana/optimize/bundles/commons.bundle.js
[email protected]:/#
           

从中我们可以知道该文件路径为:

/opt/kibana/optimize/bundles/commons.bundle.js

,我们继续将文件复制到本机并修改。

#  从docker复制文件到本机   容器id
sudo docker cp e3ad9ff8e54c:/opt/kibana/optimize/bundles/commons.bundle.js /
           

修改点:

docker 容器修改--以修改sense镜像为例

application/x-www-form-urlencoded

改成

application/json

,如下图所示

docker 容器修改--以修改sense镜像为例

接着将修改好的文件复制到容器中

# 停止容器
sudo docker stop sense

#  从本机复制文件到docker   容器id
sudo docker cp /commons.bundle.js e3ad9ff8e54c:/opt/kibana/optimize/bundles/commons.bundle.js

# 启动容器
sudo docker start sense
           

等待一下会再次执行上一步骤发现可以查询了,如下图所示,如果没有解决或展示的与图不符,请清空浏览器缓存。

docker 容器修改--以修改sense镜像为例

修改成功后,为了方便以后使用,可以将修改后的容器保存成镜像,下次就直接 load 就行,无需再次修改。

  1. 将容器打包成镜像保存

将修改的 sense 容器打包成新镜像

# 创建一个新镜像
sudo docker commit e3ad9ff8e54c oy/s12v/sense
           
#将镜像保存成 tar 归档文件
sudo docker save -o  /oy-s12v-sense.tar oy/s12v/sense
           
  1. 镜像 tar 文件验证

首先使用命令

sudo docker rmi oy/s12v/sense

将原镜像删除;接着

可以运行命令

docker load -i /oy-s12v-sense.tar

加载到 docker;紧接着使用命令

sudo docker run --name sense2 -p 25601:5601 -d oy/s12v/sense

启动镜像;最后访问地址:

http://localhost:25601/app/sense

进行查询,如图所示:

docker 容器修改--以修改sense镜像为例

说明容器修改成功,保存成新镜像成功!!!

  1. 问题记录

在第二步启动时报错如下:

docker: Error response from daemon: driver failed programming external connectivity on endpoint sense (443e930dd31e504a24c05e0d36f1d2c2a0c90cbd23982b66d8184c346d89251d):  (COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -A DOCKER -p tcp -d 0/0 --dport 15601 -j DNAT --to-destination 172.17.0.3:5601 ! -i docker0' failed: iptables: No chain/target/match by that name.
           

大体意思是docker服务定义的自定义链DOCKER由于某种原因被清掉了,重启docker服务及可重新生成自定义链DOCKER,通过运行命令

sudo iptables -L -n

可查看 docker 链。

解决:运行命令:

sudo systemctl restart docker