摘要:要在的端口上公開容器的端口請執(zhí)行以下操作可以解決這一問題的一種方法是使用所需的端口映射設(shè)置另一個(gè)容器并比較命令的輸出不過必須刪除一些其他選項(xiàng)強(qiáng)制通過代理進(jìn)行通信。
說明:
docker 小寫是指Docker系統(tǒng)的命令行工具。
Docker 大寫是指Docker軟件系統(tǒng)。
image 鏡像,就量個(gè)軟件包,除操作系統(tǒng)內(nèi)核外的,包括系統(tǒng)庫,應(yīng)用軟件,啟動配置等,創(chuàng)建后只讀。
container 是指Docker啟動一個(gè)鏡像后的運(yùn)行結(jié)果,相當(dāng)于在image基礎(chǔ)上寫盤產(chǎn)生的增量。
docker container prune
刪除所有未使用的數(shù)據(jù) (即按順序: 停止的container, 沒有container的volumne卷和沒有container容器的image鏡像):
docker system prune
用于刪除所有未標(biāo)記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中處理持久性存儲 (例如數(shù)據(jù)庫)?Docker 1.9.0 以上版本使用 volume API:
docker volume create --name hello docker run -d -v hello:/container/path/for/volume container_image my_command
這意味著必須放棄僅數(shù)據(jù)容器模式以支持新的卷模式。為了能夠保存(持久化)數(shù)據(jù)以及共享容器間的數(shù)據(jù),Docker提出了Volume的概念。簡單來說,Volume就是目錄或者文件,它可以繞過默認(rèn)的聯(lián)合文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機(jī)上。
實(shí)際上, volume 是實(shí)現(xiàn)數(shù)據(jù)容器模式的更好方法。
如果使用 -v volume_name:/container/fs/path Docker將自動為您創(chuàng)建一個(gè)已命名的卷, 用:
docker volume ls -f dangling=true
檢查卷名稱: docker volume ls
查看卷在主機(jī)上的存儲位置: docker volume inspect volume_name
可以像普通目錄一樣進(jìn)行備份
如果要授權(quán)一個(gè)容器訪問另一個(gè)容器的Volume,我們可以使用-volumes-from參數(shù)來執(zhí)行docker run
新的volume api 添加了一個(gè)有用的命令, 它允許您識別懸空卷:
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來執(zhí)行此項(xiàng), 但您可以從主機(jī)上訪問容器的未公開端口。
如果您有一個(gè)容器, 它的端口8000上運(yùn)行的東西, 您可以運(yùn)行
wget http://container_ip:8000
查看 ip 地址, 運(yùn)行以下兩個(gè)命令:
docker ps docker inspect container_name | grep IPAddress
在內(nèi)部, Docker shell在運(yùn)行 image 鏡像時(shí)調(diào)用 iptables, 因此可能會對此進(jìn)行一些更改。
要在 localhost 的8001端口上公開容器的端口 8000, 請執(zhí)行以下操作:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
可以解決這一問題的一種方法是, 使用所需的端口映射設(shè)置另一個(gè)容器, 并比較 iptables -save 命令的輸出 (不過, 必須刪除一些其他選項(xiàng), 強(qiáng)制通過Docker代理進(jìn)行通信)。
注意: 這是在顛覆Docker使用方式, 所以應(yīng)該小心使用, 它可能會創(chuàng)造藍(lán)色煙霧
或
另一種選擇, 是看-P 選項(xiàng)(0.6.6之后版本?),這將使用隨機(jī)的主機(jī)端口, 然后將這些連接起來。
或
通過 0.6.5, 您可以使用鏈接--link功能來搞一個(gè)新的容器, 它與現(xiàn)有的容器形成一個(gè)對話, 并用 -p 可以額外導(dǎo)出端口(鏈接的使用可以參考這個(gè)鏈接 http://blog.csdn.net/zhangyif... ),使用了link機(jī)制后,可以通過指定的名字來和目標(biāo)容器通信,這其實(shí)是通過給/etc/hosts中加入名稱和IP的解析關(guān)系來實(shí)現(xiàn)的
或
與docker 0.11?您可以使用 docker run --net=host。要將容器直接附加到主機(jī)的網(wǎng)絡(luò)接口, 因此在容器中打開的所有端口都將被暴露。
https://stackoverflow.com/que...
將文件從主機(jī)復(fù)制到 Docker 容器cp 命令可用于復(fù)制文件。可以復(fù)制一個(gè)特定的文件, 如:
docker cp foo.txt mycontainer:/foo .txt docker cp mycontainer:/foo foo.txt
文件夾 src 包含的多個(gè)文件可以使用以下方法復(fù)制到目標(biāo)文件夾中:
docker cp src/. mycontainer:/target docker cp mycontainer:/src/. target
在1.8 之前的Docker版本中, 僅有可能將文件從容器復(fù)制到主機(jī)。不能從主機(jī)到容器。
參考:
https://stackoverflow.com/que...
有幾種方法可以做到這一點(diǎn)。最簡單的方法是使用 Dockerfile ADD命令, 如下:
ADD . /path/inside/docker/container
但是, 在生成 Dockerfile 后, 主機(jī)上對此目錄所做的任何更改都不會顯示在容器中。這是因?yàn)樵谏扇萜鲿r(shí), Docker將目錄壓縮為.tar文件, 并將該上下文永久地上載到容器中。
第二種方法是裝載卷。為盡可能便于移植, 因此不能將主機(jī)目錄固化地映射到 dockerfile 中的 Docker 容器目錄, 因?yàn)橹鳈C(jī)目錄可以根據(jù)運(yùn)行的計(jì)算機(jī)而更改。要將主機(jī)目錄映射到 Docker 容器目錄, 在使用 Docker 運(yùn)行時(shí), 您需要使用 -v 選項(xiàng):
docker run -v /host/directory:/container/directory -other -options image_name command_to_run
參考:
https://stackoverflow.com/que...
您需要將Docker 鏡像保存為 tar 文件:
docker save -o
然后將您的圖像復(fù)制到一個(gè)具有常規(guī)文件傳輸工具 (如 cp 或 scp) 的新系統(tǒng)中。之后, 您必須將圖像加載到Docker中:
docker load -i
PS: 您可能需要 sudo 執(zhí)行命令
參見:
https://stackoverflow.com/que...
docker attach可以連接到你的docker容器, 但這與 ssh 并不完全相同。例如, 如果你的容器運(yùn)行的是網(wǎng)絡(luò)服務(wù)器, 則 docker attach可能會連接到 web 服務(wù)進(jìn)程的標(biāo)準(zhǔn)輸出。它不一定會給你一個(gè)shell。
docker exec 命令可能是你要查找的內(nèi)容;這將允許你在現(xiàn)有容器內(nèi)運(yùn)行任意命令。例如:
docker exec -itbash
當(dāng)然, 任何正在運(yùn)行的命令都必須存在于容器文件系統(tǒng)中。
在上面的命令
$ docker ps d2d4a89aaee9 larsks/mini-httpd "mini_httpd -d /cont 7 days ago Up 7 days web
可以運(yùn)行:
$ 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
同樣效果也以通過下面指令達(dá)到:
$ docker exec -it d2d4a89aaee9 ip addr
類似地也可以在容器里啟動一個(gè)shell;
$ docker exec -it web sh / # echo This is inside the container. This is inside the container. / # exit $
參考:
https://stackoverflow.com/que...
Docker 有一個(gè)默認(rèn)的入口(entrypoint), 它是/bin/sh -c, 但沒有默認(rèn)命令。
當(dāng)您運(yùn)行這樣的 Docker 時(shí): docker run -i t ubuntu bash 入口是默認(rèn)/bin/sh -c, 鏡像是 ubuntu, 命令是 bash。
該命令通過入口運(yùn)行。也就是說, 被執(zhí)行的實(shí)際的事情是/bin/sh -c bash。這允許 Docker 通過依賴 shell 分析器實(shí)現(xiàn)快速RUN。后來, 人們要求能夠定制這樣的入口于是引入了-entrypoint。
以上示例中的 ubuntu 后面的所有內(nèi)容都是命令, 并傳遞給入口。當(dāng)使用 CMD 指令時(shí), 它就像是在做 docker run --t ubuntu
如果改為鍵入此命令docker run -i -t ubuntu, 則也會得到相同的結(jié)果。您仍將在容器中啟動 bash shell, 因?yàn)?ubuntu Dockerfile 指定了默認(rèn) CMD: CMD ["bash"]
當(dāng)一切都傳遞給入口, 便對鏡像來說產(chǎn)生一個(gè)很好的特性??梢詫㈢R像用作 "二進(jìn)制"的執(zhí)行文件。當(dāng)使用 ["/bin/cat"] 作為入口, 然后運(yùn)行 docker run img /etc/passwd, 這里,/etc/passwd是命令, 并傳遞到入口,所以最終結(jié)果執(zhí)行便是/bin/cat /etc/passwd。
另一個(gè)例子是將任何命令行指令(cli)作為入口。例如, 如果您有一個(gè) redis 鏡像, 你可以簡單地通過設(shè)置ENTRYPOINT ["redis", "-H", "something", "-u", "toto"],然后運(yùn)行docker run redisimg get key得到鍵值, 而不是通過運(yùn)行 docker run redisimg redis -H something -u toto get key,來得到相同的結(jié)果。
ENTRYPOINT 指定在容器啟動時(shí)將始終執(zhí)行的命令。
CMD 指定將被送入 ENTRYPOINT 的參數(shù)。
如果要使鏡像專用于特定命令, 您將使用入口 ENTRYPOINT ["/path/dedicated_command"]
否則, 如果要為一般目的制作鏡像, 則可以保留未指定的 ENTRYPOINT 并使用 CMD ["/path/dedicated_command"], 因?yàn)槟憧梢酝ㄟ^向docker run提供參數(shù)來覆蓋該設(shè)置。
例如, 如果您的 Dockerfile 是:
FROM debian:wheezy ENTRYPOINT ["/bin/ping"] CMD ["localhost"]
運(yùn)行不帶參數(shù)的鏡像會 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
現(xiàn)在帶參數(shù)運(yùn)行鏡像則會ping 參數(shù)指定的主機(jī):
$ 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
做為比較,假設(shè)你有一個(gè) Dockerfile 如下:
FROM debian:wheezy CMD ["/bin/ping", "localhost"]
運(yùn)行不帶參數(shù)的鏡像會 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
現(xiàn)在帶參數(shù)運(yùn)行鏡像則會運(yùn)行參數(shù)指令:
docker run -it test bash root@e8bb7249b843:/#
可以看看Brian DeHamer這篇文章: https://www.ctl.io/developers...
運(yùn)行Docker鏡像微型指南 下載一個(gè)ubuntu鏡像sudo docker pull ubuntu
使用ubuntu運(yùn)行一個(gè)交互性的shellsudo docker run -i -t ubuntu /bin/bash
docker ps命令sudo docker ps #列出當(dāng)前所有正在運(yùn)行的container
sudo docker ps -l #列出最近一次啟動的,且正在運(yùn)行的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 #啟動一個(gè)已存在的docker實(shí)例
sudo docker stop $CONTAINER_ID #停止docker實(shí)例
sudo docker logs $CONTAINER_ID #查看docker實(shí)例運(yùn)行日志,確保正常運(yùn)行
sudo docker inspect $CONTAINER_ID #查看container的實(shí)例屬性,比如ip等等
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27236.html
摘要:日志會顯示令牌過期的信息,隨后檢查主機(jī)和主機(jī)的時(shí)鐘是否同步。如果這個(gè)子網(wǎng)已經(jīng)被使用,你將需要更改網(wǎng)絡(luò)中使用的默認(rèn)子網(wǎng)。如果負(fù)載均衡器處于初始化狀態(tài),則很可能主機(jī)之間無法進(jìn)行跨主機(jī)通信。而一直顯示黃色初始化狀態(tài),說明一直沒有通過健康檢查。 一、服務(wù)/容器 1、為什么我只能編輯容器的名稱? Docker容器在創(chuàng)建之后就不可更改了。唯一可更改的內(nèi)容是我們要存儲的不屬于Docker容器本身的那...
摘要:寶典系列來襲,相關(guān)的常見問題,本文一網(wǎng)打盡。在中的設(shè)置是以秒為單位的。在啟動時(shí),執(zhí)行模式遷移。它的競爭條件可能會留下一個(gè)鎖定條目,這將阻止后續(xù)的流程。更改為,并清除的值。確認(rèn)更改在表中是否生效。如果認(rèn)證未打開,則響應(yīng)代碼應(yīng)為。 Rancher FAQ寶典系列來襲,Rancher Server相關(guān)的常見問題,本文一網(wǎng)打盡。 1、Docker運(yùn)行Rancher Server容器應(yīng)該注意什么...
摘要:微店技術(shù)團(tuán)隊(duì)公眾號容器化之路這是一套以阿里云為基礎(chǔ),為核心,第三方服務(wù)為工具的開發(fā)測試部署流程,以及內(nèi)部的代碼提交,版本管理規(guī)范。如何打造安全的容器云平臺對,微服務(wù),來說都是非常好的落地實(shí)踐技術(shù)。 在使用 flow.ci 進(jìn)行持續(xù)集成的過程中,也許你會遇到一些小麻煩。最近我們整理了一些常見問題在 flow.ci 文檔之 FAQ,希望對你有用。如果你遇到其他問題,也可以通過「在線消息」或...
閱讀 3699·2021-11-24 09:39
閱讀 1311·2021-09-30 09:48
閱讀 3308·2021-09-09 11:51
閱讀 2927·2021-09-08 10:41
閱讀 1358·2019-08-30 14:06
閱讀 2829·2019-08-30 14:01
閱讀 898·2019-08-29 17:11
閱讀 3203·2019-08-29 15:37