天天看點

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

繼續閱讀