Docker與Kubernetes系列(三): 外部訪問Docker容器
阿新 • • 發佈:2019-01-08
使用 docker ps 可以看到,本地主機的 49155 被對映到了容器的 5000 埠。此時訪問本機的 49155 埠即可訪問容器內 web 應用提供的介面。
$ sudo docker run -d -P training/webapp python app.py $ sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
-p(小寫的)則可以指定要對映的埠,並且,在一個指定埠上只可以繫結一個容器。支援的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
例如:
對映所有介面地址
使用 hostPort:containerPort 格式本地的 5000 埠對映到容器的 5000 埠,可以執行
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
此時預設會繫結本地所有介面上的所有地址。
二、容器互聯
容器的連線(linking)系統是除了埠對映外,另一種跟容器中應用互動的方式。
該系統會在源和接收容器之間建立一個隧道,接收容器可以看到源容器指定的資訊。
使用 --link
引數可以讓容器之間安全的進行互動。
下面先建立一個新的資料庫容器。
$ sudo docker run -d --name db training/postgres
然後建立一個 web 容器,並將它連線到 db 容器
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
此時,db 容器和 web 容器建立互聯關係。
--link 引數的格式為 --link name:alias,其中 name 是要連結的容器的名稱,alias
使用 docker ps 來檢視容器的連線
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
349169744e49 training/postgres:latest su postgres -c '/usr About a minute ago Up About a minute 5432/tcp db, web/db
aed84ee21bde training/webapp:latest python app.py 16 hours ago Up 2 minutes 0.0.0.0:49154->5000/tcp web
可以看到自定義命名的容器,db 和 web,db 容器的 names 列有 db 也有 web/db。這表示 web 容器連結到 db 容器,web 容器將被允許訪問 db 容器的資訊。
Docker 在兩個互聯的容器之間建立了一個安全隧道,而且不用對映它們的埠到宿主主機上。在啟動 db 容器的時候並沒有使用 -p 和 -P 標記,從而避免了暴露資料庫埠到外部網路上。