docker 容器內部啟動乙個http服務

2021-10-04 12:16:54 字數 1833 閱讀 7390

首先要使用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引數。...