windows容器實踐之路

2021-09-25 22:48:16 字數 1312 閱讀 2309

1.dockerfile

使用dockerfile構建映象的命令為:docker build -t image:v1 -f df .

-t image:v1 表示新建的映象名字為image標籤為v1

-f df 構建映象的指令碼命令 在名為df的檔案中

2.在容器中啟動自己寫的程式時找不到相關檔案

在容器中執行程式的時候必須切換(cd 命令)到程式所在目錄,再啟動。如若不然程式中使用的相對路徑是找不到相應檔案的。如上圖第一次執行失敗,切換到exe所在目錄再啟動就正常。

3.在容器中啟動自己寫的程式時無反應,無任何反饋資訊。

出現這種情況是在容器的系統中程式因為缺少依賴的dll而啟動失敗, 缺少的dll往往為系統dll以及執行時dll。可以用dumpbin 檢視exe需要的dll,然後將缺少的dll補上,就解決此問題了。另外需要說明的是要基於servercore系統,nanoserver似乎仍然失敗。

4.容器目錄掛載到主機

docker run -v ./dir1:c:/dir2

在啟動容器時需要加-v指令 前面路徑代表主機路徑,使用相對路徑,docker會統一管理掛載的目錄,否則容器不易遷移。

5.容器主機埠對映

docker run -p 3000:3001

在啟動容器時需要加-p指令 前面埠代表主機埠。這樣從外部訪問主機的3000埠就會對映到容器的3001埠實現通訊。

6.操縱容器的偽終端

docker -it powershell

通常的解釋是: -t讓docker分配乙個偽終端並繫結到容器的標準輸入上, -i則讓容器的標準輸入保持開啟。這樣我們就可以通過powershell命令操作容器。如果要直接啟動容器中的程式,而不想操作容器可以使用cmd命令啟動目標程式,但是在這之前需要在dockerfile中設定當前路徑(workdir可以理解為cd ,不同之處在於沒用路徑會建立)。另外需要注意的是-it 會讓cmd命令失效,加了-it 容器啟動後不會執行cmd命令。

7.控制台程式在容器中輸出的gbk中文字元亂碼

出現此問題的原因為編碼頁不匹配,程式輸出的文字為gbk格式,但是容器中系統控制台預設是utf8編碼頁,需要修改控制台輸出編碼頁為gbk,在main函式最開始加入::setconsoleoutputcp(936);即可完成對控制台**頁的修改。另外 在cmd中使用chcp 936會提示無效**頁,所以只能在c++**中修改。

Followme Devops實踐之路

引言 天下武功,唯快不破 想要提高開發團隊效率,勢必要有一套完整而成熟的開發流程方案,除了sprint迭代開發模式之外,還有近幾年流行的devops流程,都是可以大幅度提高開發效率的工具.我們團隊也不斷探索 實踐,最終形成了現有的一套體系,從最初的手動發布到現有的自動化,從起始的繁瑣易亂到當下的簡潔...

Followme Devops實踐之路

引言 天下武功,唯快不破 想要提高開發團隊效率,勢必要有一套完整而成熟的開發流程方案,除了sprint迭代開發模式之外,還有近幾年流行的devops流程,都是可以大幅度提高開發效率的工具.我們團隊也不斷探索 實踐,最終形成了現有的一套體系,從最初的手動發布到現有的自動化,從起始的繁瑣易亂到當下的簡潔...

GDI 實踐之路(二)

我打算將gdi 的api進行封裝,提高 的重用性。結果,我遇到了乙個極其討厭的問題。通常,我們都需要將class的定義寫在.h標頭檔案中,那麼很明顯就要將gdiplus.h包含在標頭檔案中了,但是,不知道為什麼,我認為ok的 卻編譯不過,例如 gdiplus.h using namespace gd...