Docker是一種容器管理技術。
解決頭疼問題原則:回歸最簡單的方式來。確保最初級的方案沒有錯誤。
安裝
docker安裝很簡單,輸入官方的命令就可以,但是在安裝docker-comopse的過程中遇到下載超級慢的問題,所以需要配置加速器,這里使用了國內的daoclould
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
同時記得的授權:
chmod +x /usr/local/bin/docker-compose
然后下載發現較之前快了很多很多。。。。
Dockerfile
FROM microsoft/dotnet:latest
WORKDIR /app
EXPOSE 8081
WORKDIR /app
COPY . /app
ENTRYPOINT ["dotnet", "momo.dll"]
-
微軟提供的模板中 只是引入了 運行時,但是我在run的時候,docker日志一直提示需要安裝sdk,這個讓我有點搞不懂。然后查看很多人都是安裝了sdk????只好暫時先安裝sdk,把項目運行起來,后續恢復到runtime來。 下載完sdk,發現鏡像有了1.7GB,要不得要不得
-
COPY出問題,微軟在上面COPY命令行指定的是
COPY --from=publish /app .
因為我們沒有publish,所以修改成: COPY . /app
appsettings.json
如果我們連接了鏡像的mysql, 記得將連接字符串修改為鏡像名
"ConnectionStrings": {
"MySQLConnection": "server=docker.mysql;database=momo;user=root;password=123456;port=3306;persistsecurityinfo=True;"
},
nlog.config
如果是發布到linux系統中,記得修改日志存儲位置,因為網上大多數提供的是window版的。修改如下
internalLogFile="Logs\internal-nlog.txt">
此外,將windows-identity去掉,改為no
<property name="UserName" layout="windows-identity" /> ===> <property name="UserName" layout="no" />
nginx.conf
自己用記事本創建的nginx.conf會導致unknown directive錯誤,原因是文件格式不對,自己copy一個正常的再修改內容即可。
-
可能是conf文件被記事本編輯過,保存成了含[BOM] 。所以才報錯的。這種粘出來保存成utf-8就好了
-
nginx文件結構配置出錯,比如:正確的配置格式是:http{server{}} 如果你配成:http{} server{},就會報錯
異常訪問Connection reset by peer
這個是很頭痛的,因為網上陳述的較少
有時我們用Docker啟動了一個http服務,從外部使用curl訪問卻返回Connection reset by peer錯誤。這種錯誤一般是因為服務容器內部並沒有監聽指定的端口,而docker run時卻指定了該端口。進一步的,這種錯誤往往由於容器內部的服務監聽在localhost:port上,只允許本機訪問,這樣的話容器的端口映射將失敗。應該檢查容器內部服務監聽在0.0.0.0上。
無法訪問
基礎宿主機和docker容器端口映射成功,也無法訪問
解決方法:在Program.cs 中添加.UseUrls("http://*:8081") 內部服務監聽在任何IP上。同時dockerfile中暴露的端口也修改為8081.
然后在XShell客戶端 curl -i http://localhost:8081
最后
正常訪問