成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Docker踩坑,又漲知識了

開發 項目管理
Docker運行的項目定時創建文件目錄并進行文件生成等操作,但當其他應用程序來操作Docker應用生成的目錄時,會提示“Permission denied”錯誤。

?背景

新上線一個批處理功能,基于Docker發布的。上線之后出現一個問題,Docker批處理生成的文件目錄,別的應用程序無法訪問。

之前也在使用Docker,但并未涉及到文件共享的問題,還真沒留意到。經過一系列排查,終于找到原因。這篇文章就記錄一下排查過程中使用到的技術點,也幫大家重溫一下。

涉及的知識點:Docker help命令、Linux用戶/組id查看、Docker用戶指定、Docker啟動失敗日志查看等

現象分析

Docker運行的項目定時創建文件目錄并進行文件生成等操作,但當其他應用程序來操作Docker應用生成的目錄時,會提示“Permission denied”錯誤。

查看Docker生成的文件夾權限,竟然是以root用戶創建的。執行Docker的啟動腳本明明是普通用戶,生成的文件怎么就變成了root用戶了?

這里就涉及到通過Docker執行執行時所使用的用戶了。如果在執行Docker執行命令時,未指定所使用的用戶,默認以root用戶執行。在這生產環境下當然是不允許的了。

問題解決

既然找到問題的原因解決起來就比較容易了,下面記錄一下解決問題及涉及到的一些Docker命令和Linux操作。

查詢幫助文檔

先來通過help命令查看一下Docker的命令參數,如何來指定執行命令的用戶。

先嘗試了docker --help命令,結果并未找到指定用戶的命令參數:

$ sudo docker --help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

后來才意識到,查找的應該是docker的run命令的幫助文檔:

$ sudo docker run --help
...
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
--userns string User namespace to use
--uts string UTS namespace to use
...

其中便有指定run命令操作的所屬用戶參數,通過-u可指定執行命令的用戶和組。

docker指定用戶

參照幫助手冊,整理了docker的運行命令(偽代碼):

$ sudo docker run -itd -u testuser -p 8080:8080 -v /log/:/log xxx-job:latest

上述指令中通過-u username指定了執行命令的用戶,按理說可以正常執行的,但執行時拋出了以下異常信息:

docker: Error response from daemon: unable to find user testuser: no matching entries in passwd file.'

雖然當前用戶是testuser,但docker貌似并未在passwd文件中找到它,此時直接通過用戶的UID來替換Username。

獲得Linux用戶UID

獲得Linux用戶的UID有兩種方法。

方法一:執行命令。

獲得UID命令:

$ id -u
1002

當前用戶的UID便是1002。

獲得組ID命令:

$ id -g
1002

當前用戶所屬組ID便是1002。

方法二:查看/etc/passwd獲取UID和組ID。

執行cat /etc/passwd命令,顯示/etc/passwd中的內容。

圖片

圖片來源于網絡

在/etc/passwd中找到當前用戶后面對應的UID和組ID。

調整Docker命令

獲得了當前用戶的UID和組ID之后,Docker運行命令修改如下:

$ sudo docker run -itd -u 1002:1002 -p 8080:8080 -v /log/:/log xxx-job:latest

正常來說,問題到此便解決了,可正常啟動應用程序。

Docker日志查看

但筆者又遇到另外一個問題,就是Docker中應用的日志,由于之前的失誤默認通過root用戶創建的,此時使用了testuser來啟動應用程序,發現Docker無法啟動,原因很簡單testuser啟動的應用無法向root創建的日志文件寫日志。

排查啟動失敗時用到了查看Docker失敗日志的命令:

docker logs 97069f94437b

此時,或將原來的日志備份,讓系統重新生成日志文件,或直接修改日志文件權限為testuser即可。

至此,關于Docker生成目錄權限問題解決完畢。

小結

其實,導致上面問題的原因很小,就是漏了一個參數的事。但不經一事,不長一智。可能很多朋友在使用Docker的過程中可能都沒留意到這一問題。

而問題的排查過程也很有意思,不僅涉及到了Docker的操作命令,也涉及到了Linux的一些基礎知識,知識和技能就是在出現問題、解決問題的過程中增長的。

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2024-04-10 08:39:56

BigDecimal浮點數二進制

2023-03-06 07:50:19

內存回收Go

2020-12-22 09:34:20

JavaScript開發技術

2020-10-12 06:28:05

動態IP框架

2021-09-09 18:12:22

內存分段式網絡

2020-09-29 07:57:48

設置HttpClientContent-Typ

2020-09-06 10:02:32

項目管理戰略目標CIO

2024-05-17 09:37:26

format屬性Spring

2019-01-29 10:00:59

GitHub開源搜索

2022-05-06 20:17:46

Wi-Fi信號基站

2021-07-28 05:01:29

Lombok前端測試

2024-11-20 18:16:39

MyBatis批量操作數據庫

2023-01-18 23:20:25

編程開發

2020-09-15 08:46:26

Kubernetes探針服務端

2015-07-23 13:31:37

2023-02-20 08:11:04

2021-10-28 19:10:02

Go語言編碼

2017-05-05 08:12:51

Spark共享變量

2023-07-18 19:11:21

配置信令系統

2021-04-14 17:34:18

線程安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本黄色激情视频 | 亚洲视频免费在线观看 | 高清国产午夜精品久久久久久 | 中文字幕在线一区二区三区 | 国产不卡在线观看 | 狠狠狠 | 国产激情视频网站 | 精品国产一区二区三区日日嗨 | 97av在线| 亚洲成人在线免费 | 欧美日韩中文国产一区发布 | 国产真实精品久久二三区 | 国产一区二区不卡 | 成人午夜免费视频 | 一级少妇女片 | 欧美激情一区二区三级高清视频 | 91视频正在播放 | 自拍偷拍在线视频 | 国产91一区| 亚洲狠狠爱 | 日韩毛片| 国产精品国产三级国产aⅴ中文 | 香蕉视频一区二区 | 嫩草国产| 国产高清视频一区二区 | 久久成人人人人精品欧 | 日本在线一区二区 | 色综合中文 | 久久精品青青大伊人av | 中文字幕在线观看成人 | 久久婷婷色 | 国产精品99久久久久久动医院 | 91资源在线观看 | 欧美亚洲国产日韩 | 亚洲97| 精品真实国产乱文在线 | 亚洲欧美日韩在线 | 激情国产视频 | 国产精久久久久久久妇剪断 | 中文字幕欧美日韩一区 | 亚洲高清在线观看 |