![docker 並設定連接](https://rvso.com/image/1601539/docker%20%E4%B8%A6%E8%A8%AD%E5%AE%9A%E9%80%A3%E6%8E%A5.png)
我從公共儲存庫中提取了一個容器,並且想向其中安裝一個套件。但沒有成功...請問有什麼幫助嗎?如何設定 docker 與套件儲存庫的連接?
[root@adf2 adf2_umb_docker]# docker ps -l
容器 ID 映像指令建立狀態連接埠名稱
8a9a015c5301 devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi18.4 “bash” 8 分鐘前 8 分鐘 admiring_shirley
[root@adf2 adf2_umb_docker]# docker run devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi18.4 bash -c "apt-get -y install vim"
正在閱讀包裝清單...
建構依賴樹...
正在讀取狀態資訊...
E: 無法找到 vim 包
管理員從防火牆通知我此日誌:
8 月 23 日 23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t nat -C OUTPUT -m addrtype --dst-type LOCAL -j DOCKER ! --dst 127.0.0.0/8' 失敗:iptables:沒有該名稱的鏈/目標/匹配。
8 月23 日23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER' 失敗:iptables:沒有鏈/目標/匹配那個名字。
8 月 23 日 23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-ISOLATION' 失敗:iptables:無鏈/目標/匹配姓名。
8 月 23 日 23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t nat -C POSTROUTING -s 192.168.0.0/20 ! -o docker0 -j MASQUERADE' 失敗:iptables:沒有該名稱的鏈/目標/匹配。
8月23日23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t nat -C DOCKER -i docker0 -j RETURN'失敗:iptables:錯誤規則(執行匹配規則)存在於該鏈中嗎?
8月23日23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -D FORWARD -i docker0 -o docker0 -j DROP'失敗:iptables:錯誤規則(執行匹配規則)存在於該鏈中嗎?
8 月23 日23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 -o docker0 -jip ACCEPT' 失敗:iptables:錯誤規則(確實如此)該鏈中存在匹配規則嗎?
8 月 23 日 23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t 過濾器 -C FORWARD -i docker0 ! -o docker0 -j ACCEPT' 失敗:iptables:錯誤規則(該鏈中是否存在符合規則?)。
8 月23 日23:02:08 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED - ACABLPT'失敗: iptables:錯誤規則(該鏈中是否存在匹配規則?)。
8 月23 日23:02:09 adf2 firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER' 失敗:iptables:沒有鏈/目標/匹配那個名字。
答案1
這不是在 Docker 中新增套件的方式。使用您的方法讓容器實例向自身添加一個套件。這也造成了未來的問題:
- 如何備份這個容器
- 如有必要,如何重建它
正確的方法是使用 Dockerfile 派生映像:
FROM devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi/18.4
RUN apt-get -y install vim
然後您使用以下命令創建圖像:
docker build -t "TheDerivedImageName" $TheDirectpryWithTheDockerfFile
並在必要時透過建立容器實例來運行映像:
docker run TheDerivedImageName
Dockerfile 和關聯的檔案是主機檔案:它們可以備份、放入原始碼控制系統(git...)、與其他人共用...
此外,在 docker 映像中安裝 Vim 是不必要的,並且暗示您可能沒有正確使用 Docker。如果您需要在容器中建立/編輯文件,您可以:
COPY
在建置時使用Dockerfile 中的語句將它們放入映像中- 使用下列命令與容器共用主機上的檔案或目錄“綁定掛載”,並從主機編輯它們。