首先要使用docker start
命令啟動乙個已經停止的容器:
docker start -i c2f30
指定-i
引數,則可以進入容器內部。
接下來,建立乙個python指令碼:
# test.py
from flask import flask
'/')
deffunc()
:return
"hello docker!"
if __name__ ==
'__main__'
:'0.0.0.0'
, port=
5000
)
然後執行python test.py
,控制台應該列印以下內容:
(lazy loading)
* environment: production
warning: this is a development server. do not use it in a production deployment.
use a production wsgi server instead.
* debug mode: off
* running on (press ctrl+c to quit)
好了,至此我們已經啟動了乙個簡單的http服務。接下來,需要讓容器掛起在後台執行,然後去宿主機看看能不能請求到這個服務。
為了退出容器時讓其在後台執行,可以按住ctrl+p+q
退出。退出後用docker ps
檢視,發現該容器的狀態是up
,即「掛起」。
開啟宿主機的瀏覽器,在位址列輸入http://localhost:5000/
,就可以看到螢幕顯示的「hello docker!」了。或者利用curl
命令:
curl
注意到在第一步中,並沒有做所謂的埠對映,但宿主機仍然可以請求到容器內的服務,這是因為在建立容器時指定了--network
引數的值為host
,其作用可以理解為容器和宿主機是網路共享的。既然網路都是共享的,當然不需要額外指定埠了。
比較正式的說法,可以去官網檢視。如果在用
docker run
建立新容器時不指定--network
,此時的網路連線方式為bridge
,那麼要想宿主機可以訪問容器內的服務,就需要指定埠映**:
docker run -it -p 50001:5000 my-first-image /bin/bash
-p
引數的意思是將容器的埠(5000)對映到宿主機的50001上。
想象中,按照上述方式啟動了乙個容器,並執行python test.py
。那麼在容器外訪問,然而,我執行了
curl
命令後,得到的結果是:
[root@localhost ~]
# curl
curl: (56) recv failure: connection reset by peer
這是什麼原因呢?我查了很久的資料,也在不同的平台上提問過,但目前仍然沒有找到原因及解決方案。所以,只能採用--network host
的方式生成容器了。
具體的問題描述我貼在了這裡,如果哪位大神路過,歡迎不吝賜教!感激!
docker 啟動乙個 redis
d 以守護執行緒的方式執行 後台執行 i 以互動模式執行容器 t 為容器重新分配乙個偽輸入終端 p 對映容器服務的 6379 埠到宿主機的 6379 埠。外部可以直接通過宿主機ip 6379 訪問到 redis 的服務。未加 it可能會執行不起來因為,docker容器後台執行,就必須有乙個前台程序,...
Docker啟動乙個Centos映象
個人站點 1.拉取完成乙個centos映象之後,開始啟動 執行命令 docker run d i t bin bash 2.進入我們這個centos 執行命令 docker attach 進入centos後,發現竟然沒有ifconfig和ssh 3.安裝ifconfig和ssh 執行命令 yum s...
Docker啟動乙個Centos映象
docker映象的獲取與使用 docker中使用centos7映象 執行命令 docker run d i t bin bash這樣就能啟動乙個一直停留在後台執行的centos了。如果少了 bin bash的話,docker會生成乙個container但是馬上就停止了,不會一致執行即使有了 d引數。...