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,我们可以看到界面:
在这里插入图片描述
说明我们启动成功了。现在在 Server 输入 es 地址,如下图所示:
在这里插入图片描述

点击 “执行”后可看到右侧报错 Content-Type header [application/x-www-form-urlencoded; charset=UTF-8] is not supported
从中可以看到,容器以正常启动,但使用其进行 es 操作时会报错,综上所述,在不进行任何修改的 s12v/sense 镜像连接高版本 es 时是会报不支持的请求头错误。

查看请求信息:
在这里插入图片描述
从上我们可知道 commons.bundle.js 存在问题,接下来需要我们进行修改 js 文件。

  1. 修改容器

首先进入容器并搜索文件 commons.bundle.js

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

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

结果如下:

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

从中我们可以知道该文件路径为:/opt/kibana/optimize/bundles/commons.bundle.js,我们继续将文件复制到本机并修改。

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

修改点:
在这里插入图片描述
application/x-www-form-urlencoded 改成 application/json,如下图所示

在这里插入图片描述

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

# 停止容器
sudo docker stop sense

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

# 启动容器
sudo docker start 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 进行查询,如图所示:

在这里插入图片描述

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

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lytao123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值