Docker踩坑小記


Docker是一個開放平台用於快速開發、分發和部署應用程序。
  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"]
  1. 微軟提供的模板中 只是引入了 運行時,但是我在run的時候,docker日志一直提示需要安裝sdk,這個讓我有點搞不懂。然后查看很多人都是安裝了sdk????只好暫時先安裝sdk,把項目運行起來,后續恢復到runtime來。 下載完sdk,發現鏡像有了1.7GB,要不得要不得

  2. 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一個正常的再修改內容即可。

  1. 可能是conf文件被記事本編輯過,保存成了含[BOM] 。所以才報錯的。這種粘出來保存成utf-8就好了

  2. 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

最后

正常訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM