簡體   English   中英

CentOS 7上的Docker卷

[英]Docker volumes on CentOS 7

嘗試將卷映射到tomcat容器中的主機時,在CentOS 7上遇到了問題。 這會在公共tomcat圖像以及我創建的圖像(基於centos而非debian)中發生。

實例化如下容器將成功:docker run -it -d tomcat:8

如下所示實例化容器將成功,但是日志中有錯誤,並且日志未寫入主機:docker run -it -d -v / usr / local / tomcat:/ usr / local / tomcat tomcat:8

[wpackard@eagle2 tomcat]$ dkr run -it -d -v 

/usr/local/tomcat:/usr/local/tomcat tomcat:8
34075701b1436f83a24212170b4d2113ae698df244c449203b1c9af9814485c9
[wpackard@eagle2 tomcat]$ dkr ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
34075701b143        tomcat:8            "catalina.sh run"   5 seconds ago       Up 4 seconds        8080/tcp            sharp_einstein
[wpackard@eagle2 tomcat]$ dkr logs sharp_einstein
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
java.util.logging.ErrorManager: 4
java.io.FileNotFoundException: /usr/local/tomcat/logs/catalina.2015-03-31.log (Permission denied)

...

31-Mar-2015 15:32:04.088 SEVERE [Catalina-startStop-1] org.apache.catalina.startup.HostConfig.start Unable to create directory for deployment: /usr/local/tomcat/conf/Catalina/localhost
31-Mar-2015 15:32:04.097 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
31-Mar-2015 15:32:04.468 WARNING [localhost-startStop-1] org.apache.catalina.core.StandardContext.postWorkDirectory Failed to create work directory [/usr/local/tomcat/work/Catalina/localhost/ROOT] for context []
31-Mar-2015 15:32:05.966 SEVERE [localhost-startStop-1] org.apache.jasper.EmbeddedServletOptions.<init> The scratchDir you specified: /usr/local/tomcat/work/Catalina/localhost/ROOT is unusable.
31-Mar-2015 15:32:06.042 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 1,929 ms
31-Mar-2015 15:32:06.043 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
31-Mar-2015 15:32:06.093 WARNING [localhost-startStop-1] org.apache.catalina.core.StandardContext.postWorkDirectory Failed to create work directory [/usr/local/tomcat/work/Catalina/localhost/docs] for context [/docs]
31-Mar-2015 15:32:06.216 SEVERE [localhost-startStop-1] org.apache.jasper.EmbeddedServletOptions.<init> The scratchDir you specified: /usr/local/tomcat/work/Catalina/localhost/docs is unusable.
31-Mar-2015 15:32:06.219 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 176 ms
31-Mar-2015 15:32:06.220 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
31-Mar-2015 15:32:06.272 WARNING [localhost-startStop-1] org.apache.catalina.core.StandardContext.postWorkDirectory Failed to create work directory [/usr/local/tomcat/work/Catalina/localhost/examples] for context [/examples]
31-Mar-2015 15:32:07.952 SEVERE [localhost-startStop-1] org.apache.jasper.EmbeddedServletOptions.<init> The scratchDir you specified: /usr/local/tomcat/work/Catalina/localhost/examples is unusable.
[wpackard@eagle2 tomcat]$

執行該容器並嘗試寫入也失敗。

[wpackard@eagle2 tomcat]$ dkr ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
34075701b143        tomcat:8            "catalina.sh run"   5 minutes ago       Up 5 minutes        8080/tcp            sharp_einstein
[wpackard@eagle2 tomcat]$ dkr exec -it sharp_einstein /bin/bash
root@34075701b143:/usr/local/tomcat# ls -l
total 96
-rw-rw-r--. 1 root root 56977 Jan 23 11:59 LICENSE
-rw-rw-r--. 1 root root  1397 Jan 23 11:59 NOTICE
-rw-rw-r--. 1 root root  6779 Jan 23 11:59 RELEASE-NOTES
-rw-rw-r--. 1 root root 16204 Jan 23 11:59 RUNNING.txt
drwxrwxr-x. 2 root root  4096 Mar 31 12:14 bin
drwxrwxr-x. 2 root root  4096 Jan 23 11:59 conf
drwxrwxr-x. 2 root root  4096 Mar 31 12:14 lib
drwxrwxr-x. 2 root root     6 Jan 23 11:56 logs
drwxrwxr-x. 2 root root    29 Mar 31 12:14 temp
drwxrwxr-x. 7 root root    76 Jan 23 11:57 webapps
drwxrwxr-x. 2 root root     6 Jan 23 11:56 work
root@34075701b143:/usr/local/tomcat# cd logs
root@34075701b143:/usr/local/tomcat/logs# echo "test" > test.log
bash: test.log: Permission denied

我已經在centos上創建了一個postgresql容器的實例,該實例成功地映射和使用了該卷,並通過創建一個db,停止該實例然后重新運行該容器來進行驗證。

[wpackard@eagle2 ~]$ uname --all
Linux eagle2 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[wpackard@eagle2 ~]$

dkr是docker的別名,我創建了一個docker組並將自己添加到該組中,從而消除了對sudo的需要。

卷映射似乎在ubuntu上正常工作。 在CentOS上,我既嘗試了軟件包版本(如下所示),又將其更新為1.5。

[wpackard@eagle2 ~]$ dkr --version
Docker version 1.3.2, build 39fa2fa/1.3.2
[wpackard@eagle2 ~]$

如何使卷在CentOS上工作?

我認為您的卷正在運行:-)您有權限問題。 我經常在主機和容器之間使用用戶ID的映射遇到這種情況。 在主機上,如果查看/ usr / local / tomcat(ls -ld),將看到所有者,組和權限。 您可能會有類似0755的信息(所有者讀/寫/執行,組讀/執行,組讀/執行。您可以輕松測試此理論,簡單地記住/ usr / local / tomcat / logs的當前設置,然后做:

chmod 777 /usr/local/tomcat/logs

泊塢窗主機 (不是容器)。 然后在容器上運行測試,“權限被拒絕”應該消失。

但是,這不是一個好的解決方案。 我不知道社區對docker的用戶ID映射怎么說。 您可以做的一件事是找出主機中該目錄的用戶和組。 然后,在創建映像時(或在運行時),在容器中創建一個具有相同ID的用戶和一個具有相同ID的組。 然后在容器中使用該用戶運行tomcat服務。

這是由於SELinux。

您必須將正確的類型附加到主機目錄:

host$ chcon -Rt svirt_sandbox_file_t /usr/local/tomcat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM