本篇是關於 docker 容器的埠對映和容器之間的互聯內容。
注:環境為 centos7,docker 19.03。docker 的容器除了能連線網路外,在許多時候,我們需要讓多個容器來協同完成任務。為了應對這樣的需求,docker 提供了兩種機制:
容器啟動時,如果不指定對應的引數,容器外部是無法訪問容器內部的。要讓外部能訪問內部的話,在容器啟動時利用選項 -p | -p 可以實現埠的對映。
# docker ps
container id image command created status ports names
指定 -p 隨機分配主機的32768埠對映到容器的5000埠,訪問主機的32768輸出如下:
# curl
hello world!
利用選項 -p | -p 能實現不同的對映型別。
1.指定埠對映:-p hostport:containerport
2.多個埠對映,多次使用 -p 實現
3.對映到指定位址的指定埠 -p ip:hostport:containerport
4.對映到指定位址的任意埠 -p ip::containerport
5.對映到指定的協議 tcp 或 udp -p ip::containerport/protocol
檢視 docker 容器的對映埠可以使用 inspect 命令,同時 docker 也提供了更直觀的子命令 port
# docker port f061c03d
5000/udp -> 127.0.0.1:5000
容器的互聯(linking) 是⼀種讓多個容器中的應⽤進⾏快速互動的⽅式。 它會在源和接收容器之間建立連線關係, 接收容器可以通過容器名快速訪問到源容器, ⽽不⽤指定具體的ip位址。
連線系統依據容器的名稱來執⾏。所以在啟動容器的時候需要使用 --name 選項指定容器名稱,雖然容器啟動時會被隨機分配乙個名稱,但互聯是指定名稱還是必要的。
注:docker 名唯一。容器互聯使用選項
--link name:alias
,前者是容器名,後者是自定義的別名。
例如我們建立乙個資料庫容器 db ,再建立乙個web應用容器 web 連線 db
# docker run -d --name db training/postgres
# docker ps -a
container id image command created status ports names
73fd1af29108 training/postgres "su postgres -c '/us…" 5 seconds ago up 4 seconds 5432/tcp db
# docker ps
container id image command created status ports names
73fd1af29108 training/postgres "su postgres -c '/us…" about a minute ago up about a minute 5432/tcp db
這樣一來,web容器就和db容器建立互聯關係了。
docker 相當於在兩個互聯的容器之間建立了⼀個虛機通道, ⽽且不⽤對映它們的端⼜到宿主主機上。 在啟動db容器的時候並沒有使⽤ -p 和 -p 標記, 從⽽避免了暴露資料庫服務端⼜到外部⽹絡上。
docker 通過兩種⽅式為容器公開連線資訊:
重新啟動容器檢視它互聯的環境變數
term=xterm
db_port=tcp:
db_port_5432_tcp=tcp:
db_port_5432_tcp_addr=172.17.0.3
db_port_5432_tcp_port=5432
db_port_5432_tcp_proto=tcp
db_name=/web4/db
db_env_pg_version=9.3
home=/root
其中db_開頭的環境變數是供web容器連線db容器使⽤, 字首採⽤⼤寫的連線別名。
除了環境變數, docker 還新增 host 資訊到⽗容器的 /etc/hosts 的⽂件。 下⾯是⽗容器 web 的 hosts ⽂件:
172.17.0.3 db 73fd1af29108
172.17.0.4 7e983b169dd5
172.17.0.3 指定 db 容器和對應的 id,172.17.0.4 是 web 容器。當然使用多個 --link 就可以連線多個容器。 docker 網路模式 和 埠對映
docker 自帶 3 種 網路模式 分別是bridge網路,host網路,none網路,可以使用 docker network ls 命令檢視。這種網路模式下容器只有lo回環網路,沒有其他網絡卡。none網路可以在容器建立時通過 network none 來指定。這種型別的網路沒有辦法聯網,封閉的...
docker 追加docker容器埠對映的方法
docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。但這樣太麻煩了。現在有新方案來解決掉 操作步驟 1 檢視容器 docker ps a2 停止容器 docker stop f5033 停止dock...
Docker更改容器埠對映
一般情況下是不可以改變容器的埠對映的,只有通過run命令指定。如果想要不改變容器內容和配置的情況下更改埠對映只有先停止,然後將容器打包成映象,然後在執行新的映象的時候指定新的埠對映。先停止容器 docker stop containera 將容器commit成為乙個映象 docker commit ...