摘要:要在的端口上公開容器的端口請執行以下操作可以解決這一問題的一種方法是使用所需的端口映射設置另一個容器并比較命令的輸出不過必須刪除一些其他選項強制通過代理進行通信。
說明:
docker 小寫是指Docker系統的命令行工具。
Docker 大寫是指Docker軟件系統。
image 鏡像,就量個軟件包,除操作系統內核外的,包括系統庫,應用軟件,啟動配置等,創建后只讀。
container 是指Docker啟動一個鏡像后的運行結果,相當于在image基礎上寫盤產生的增量。
docker container prune
刪除所有未使用的數據 (即按順序: 停止的container, 沒有container的volumne卷和沒有container容器的image鏡像):
docker system prune
用于刪除所有未標記image鏡像的類似命令:
docker images | grep "" | awk "{print $3}" | xargs docker rmi
如果你的docker比較舊,可以用下面的命令:
docker rm $(docker ps -q -f status=exited)
Windows下:
FOR /f "tokens=*" %i IN ("docker ps -a -q") DO docker rm %i
如用PowerShell:
docker rm @(docker ps -aq)
參見 :https://stackoverflow.com/que...
如何在Docker中處理持久性存儲 (例如數據庫)?Docker 1.9.0 以上版本使用 volume API:
docker volume create --name hello docker run -d -v hello:/container/path/for/volume container_image my_command
這意味著必須放棄僅數據容器模式以支持新的卷模式。為了能夠保存(持久化)數據以及共享容器間的數據,Docker提出了Volume的概念。簡單來說,Volume就是目錄或者文件,它可以繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在于宿主機上。
實際上, volume 是實現數據容器模式的更好方法。
如果使用 -v volume_name:/container/fs/path Docker將自動為您創建一個已命名的卷, 用:
docker volume ls -f dangling=true
檢查卷名稱: docker volume ls
查看卷在主機上的存儲位置: docker volume inspect volume_name
可以像普通目錄一樣進行備份
如果要授權一個容器訪問另一個容器的Volume,我們可以使用-volumes-from參數來執行docker run
新的volume api 添加了一個有用的命令, 它允許您識別懸空卷:
docker volume ls -f dangling=true
然后通過它的名稱刪除它:
docker volume rm
也可以一行代碼搞定全部:
docker volume rm $(docker volume ls -f dangling=true -q) # 或用 1.13.x 以上版本 docker volume prune
參見: https://stackoverflow.com/que...
是否可以在活Docker container中公開端口?不能通過Docker來執行此項, 但您可以從主機上訪問容器的未公開端口。
如果您有一個容器, 它的端口8000上運行的東西, 您可以運行
wget http://container_ip:8000
查看 ip 地址, 運行以下兩個命令:
docker ps docker inspect container_name | grep IPAddress
在內部, Docker shell在運行 image 鏡像時調用 iptables, 因此可能會對此進行一些更改。
要在 localhost 的8001端口上公開容器的端口 8000, 請執行以下操作:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
可以解決這一問題的一種方法是, 使用所需的端口映射設置另一個容器, 并比較 iptables -save 命令的輸出 (不過, 必須刪除一些其他選項, 強制通過Docker代理進行通信)。
注意: 這是在顛覆Docker使用方式, 所以應該小心使用, 它可能會創造藍色煙霧
或
另一種選擇, 是看-P 選項(0.6.6之后版本?),這將使用隨機的主機端口, 然后將這些連接起來。
或
通過 0.6.5, 您可以使用鏈接--link功能來搞一個新的容器, 它與現有的容器形成一個對話, 并用 -p 可以額外導出端口(鏈接的使用可以參考這個鏈接 http://blog.csdn.net/zhangyif... ),使用了link機制后,可以通過指定的名字來和目標容器通信,這其實是通過給/etc/hosts中加入名稱和IP的解析關系來實現的
或
與docker 0.11?您可以使用 docker run --net=host。要將容器直接附加到主機的網絡接口, 因此在容器中打開的所有端口都將被暴露。
https://stackoverflow.com/que...
將文件從主機復制到 Docker 容器cp 命令可用于復制文件。可以復制一個特定的文件, 如:
docker cp foo.txt mycontainer:/foo .txt docker cp mycontainer:/foo foo.txt
文件夾 src 包含的多個文件可以使用以下方法復制到目標文件夾中:
docker cp src/. mycontainer:/target docker cp mycontainer:/src/. target
在1.8 之前的Docker版本中, 僅有可能將文件從容器復制到主機。不能從主機到容器。
參考:
https://stackoverflow.com/que...
有幾種方法可以做到這一點。最簡單的方法是使用 Dockerfile ADD命令, 如下:
ADD . /path/inside/docker/container
但是, 在生成 Dockerfile 后, 主機上對此目錄所做的任何更改都不會顯示在容器中。這是因為在生成容器時, Docker將目錄壓縮為.tar文件, 并將該上下文永久地上載到容器中。
第二種方法是裝載卷。為盡可能便于移植, 因此不能將主機目錄固化地映射到 dockerfile 中的 Docker 容器目錄, 因為主機目錄可以根據運行的計算機而更改。要將主機目錄映射到 Docker 容器目錄, 在使用 Docker 運行時, 您需要使用 -v 選項:
docker run -v /host/directory:/container/directory -other -options image_name command_to_run
參考:
https://stackoverflow.com/que...
您需要將Docker 鏡像保存為 tar 文件:
docker save -o
然后將您的圖像復制到一個具有常規文件傳輸工具 (如 cp 或 scp) 的新系統中。之后, 您必須將圖像加載到Docker中:
docker load -i
PS: 您可能需要 sudo 執行命令
參見:
https://stackoverflow.com/que...
docker attach可以連接到你的docker容器, 但這與 ssh 并不完全相同。例如, 如果你的容器運行的是網絡服務器, 則 docker attach可能會連接到 web 服務進程的標準輸出。它不一定會給你一個shell。
docker exec 命令可能是你要查找的內容;這將允許你在現有容器內運行任意命令。例如:
docker exec -itbash
當然, 任何正在運行的命令都必須存在于容器文件系統中。
在上面的命令
$ docker ps d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
可以運行:
$ docker exec -it web ip addr 1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 18: eth0: mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff inet 172.17.0.3/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:3/64 scope link valid_lft forever preferred_lft forever
同樣效果也以通過下面指令達到:
$ docker exec -it d2d4a89aaee9 ip addr
類似地也可以在容器里啟動一個shell;
$ docker exec -it web sh / # echo This is inside the container. This is inside the container. / # exit $
參考:
https://stackoverflow.com/que...
Docker 有一個默認的入口(entrypoint), 它是/bin/sh -c, 但沒有默認命令。
當您運行這樣的 Docker 時: docker run -i t ubuntu bash 入口是默認/bin/sh -c, 鏡像是 ubuntu, 命令是 bash。
該命令通過入口運行。也就是說, 被執行的實際的事情是/bin/sh -c bash。這允許 Docker 通過依賴 shell 分析器實現快速RUN。后來, 人們要求能夠定制這樣的入口于是引入了-entrypoint。
以上示例中的 ubuntu 后面的所有內容都是命令, 并傳遞給入口。當使用 CMD 指令時, 它就像是在做 docker run --t ubuntu
如果改為鍵入此命令docker run -i -t ubuntu, 則也會得到相同的結果。您仍將在容器中啟動 bash shell, 因為 ubuntu Dockerfile 指定了默認 CMD: CMD ["bash"]
當一切都傳遞給入口, 便對鏡像來說產生一個很好的特性。可以將鏡像用作 "二進制"的執行文件。當使用 ["/bin/cat"] 作為入口, 然后運行 docker run img /etc/passwd, 這里,/etc/passwd是命令, 并傳遞到入口,所以最終結果執行便是/bin/cat /etc/passwd。
另一個例子是將任何命令行指令(cli)作為入口。例如, 如果您有一個 redis 鏡像, 你可以簡單地通過設置ENTRYPOINT ["redis", "-H", "something", "-u", "toto"],然后運行docker run redisimg get key得到鍵值, 而不是通過運行 docker run redisimg redis -H something -u toto get key,來得到相同的結果。
ENTRYPOINT 指定在容器啟動時將始終執行的命令。
CMD 指定將被送入 ENTRYPOINT 的參數。
如果要使鏡像專用于特定命令, 您將使用入口 ENTRYPOINT ["/path/dedicated_command"]
否則, 如果要為一般目的制作鏡像, 則可以保留未指定的 ENTRYPOINT 并使用 CMD ["/path/dedicated_command"], 因為你可以通過向docker run提供參數來覆蓋該設置。
例如, 如果您的 Dockerfile 是:
FROM debian:wheezy ENTRYPOINT ["/bin/ping"] CMD ["localhost"]
運行不帶參數的鏡像會 ping localhost:
$ docker run -it test PING localhost (127.0.0.1): 48 data bytes 56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.096 ms 56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.088 ms 56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.088 ms ^C--- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.088/0.091/0.096/0.000 ms
現在帶參數運行鏡像則會ping 參數指定的主機:
$ docker run -it test google.com PING google.com (173.194.45.70): 48 data bytes 56 bytes from 173.194.45.70: icmp_seq=0 ttl=55 time=32.583 ms 56 bytes from 173.194.45.70: icmp_seq=2 ttl=55 time=30.327 ms 56 bytes from 173.194.45.70: icmp_seq=4 ttl=55 time=46.379 ms ^C--- google.com ping statistics --- 5 packets transmitted, 3 packets received, 40% packet loss round-trip min/avg/max/stddev = 30.327/36.430/46.379/7.095 ms
做為比較,假設你有一個 Dockerfile 如下:
FROM debian:wheezy CMD ["/bin/ping", "localhost"]
運行不帶參數的鏡像會 ping localhost:
$ docker run -it test PING localhost (127.0.0.1): 48 data bytes 56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.076 ms 56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.087 ms 56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.090 ms ^C--- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.076/0.084/0.090/0.000 ms
現在帶參數運行鏡像則會運行參數指令:
docker run -it test bash root@e8bb7249b843:/#
可以看看Brian DeHamer這篇文章: https://www.ctl.io/developers...
運行Docker鏡像微型指南 下載一個ubuntu鏡像sudo docker pull ubuntu
使用ubuntu運行一個交互性的shellsudo docker run -i -t ubuntu /bin/bash
docker ps命令sudo docker ps #列出當前所有正在運行的container
sudo docker ps -l #列出最近一次啟動的,且正在運行的container
sudo docker ps -a #列出所有的container
docker run -p 80:8080
sudo docker rm sudo docker ps -a -q#刪除所有容器
sudo docker rm $CONTAINER_ID#刪除容器id為CONTAINER_ID的容器
sudo docker images #查看本地鏡像
sudo docker attach $CONTAINER_ID #啟動一個已存在的docker實例
sudo docker stop $CONTAINER_ID #停止docker實例
sudo docker logs $CONTAINER_ID #查看docker實例運行日志,確保正常運行
sudo docker inspect $CONTAINER_ID #查看container的實例屬性,比如ip等等
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27236.html
摘要:日志會顯示令牌過期的信息,隨后檢查主機和主機的時鐘是否同步。如果這個子網已經被使用,你將需要更改網絡中使用的默認子網。如果負載均衡器處于初始化狀態,則很可能主機之間無法進行跨主機通信。而一直顯示黃色初始化狀態,說明一直沒有通過健康檢查。 一、服務/容器 1、為什么我只能編輯容器的名稱? Docker容器在創建之后就不可更改了。唯一可更改的內容是我們要存儲的不屬于Docker容器本身的那...
摘要:寶典系列來襲,相關的常見問題,本文一網打盡。在中的設置是以秒為單位的。在啟動時,執行模式遷移。它的競爭條件可能會留下一個鎖定條目,這將阻止后續的流程。更改為,并清除的值。確認更改在表中是否生效。如果認證未打開,則響應代碼應為。 Rancher FAQ寶典系列來襲,Rancher Server相關的常見問題,本文一網打盡。 1、Docker運行Rancher Server容器應該注意什么...
摘要:微店技術團隊公眾號容器化之路這是一套以阿里云為基礎,為核心,第三方服務為工具的開發測試部署流程,以及內部的代碼提交,版本管理規范。如何打造安全的容器云平臺對,微服務,來說都是非常好的落地實踐技術。 在使用 flow.ci 進行持續集成的過程中,也許你會遇到一些小麻煩。最近我們整理了一些常見問題在 flow.ci 文檔之 FAQ,希望對你有用。如果你遇到其他問題,也可以通過「在線消息」或...
閱讀 3669·2021-11-24 09:39
閱讀 1274·2021-09-30 09:48
閱讀 3257·2021-09-09 11:51
閱讀 2883·2021-09-08 10:41
閱讀 1328·2019-08-30 14:06
閱讀 2797·2019-08-30 14:01
閱讀 873·2019-08-29 17:11
閱讀 3169·2019-08-29 15:37