डॉकर पर अपाचे वॉल्यूम फाइल सिस्टम पर नहीं लिख सकता है

मैंने बनाया एक छवि मैगेंटो एक्सटेंशन डेवलपमेंट के लिए अपाचे को मॉड_पीएचपी के साथ चलाने के लिए । मैगेंटो को वेबरूट पर लिखने की जरूरत है: यह फाइलों को अंदर रखता है /srv/magento/var/ कैश, त्रुटि रिपोर्टिंग और कुछ अन्य सुविधाओं के लिए । इस छवि पर वेबरूट एक डॉकर वॉल्यूम है, और अपाचे रूट के रूप में नहीं चलता है, इसलिए यह फाइल सिस्टम पर नहीं लिख सकता है, इसलिए मैगेंटो विफल हो जाता है ।

मैं वास्तव में कंटेनर के भीतर निर्देशिका को मज़बूती से चाउ या चमोड नहीं कर सकता । मैं नहीं करना चाहते हैं का उपयोग करने के लिए एक गोदी श्रमिक मात्रा कंटेनर क्योंकि devs होना चाहिए के लिए सीधी पहुँच फ़ाइलों में Magento webroot. मैं विशेष रूप से अपाचे को कंटेनर में रूट के रूप में चलाने का मन नहीं करूंगा, लेकिन apachectl यकीन है कि मन लगता है ।

अपाचे उपयोगकर्ता को डॉकर कंटेनर में वॉल्यूम तक पहुंच लिखने का उचित तरीका क्या है?

इस उदाहरण के मामले पर विचार करें:

$ cd $(mktemp -dt$(date +%s))$ docker run -d -p 80:80 -v "$PWD:/srv/magento" kojiromike/magento_apache$ cat > index.php <<PHP<?php file_put_contents('foo', 'bar');PHP$ wget -SO/dev/null http://$(boot2docker ip 2>/dev/null)/index.php--2014-12-15 13:33:59--  http://192.168.59.103/index.phpConnecting to 192.168.59.103:80... connected.HTTP request sent, awaiting response...   HTTP/1.1 200 OK  Date: Mon, 15 Dec 2014 17:18:49 GMT  Server: Apache/2.2.22 (Debian)  X-Powered-By: PHP/5.4.35-0+deb7u2  Vary: Accept-Encoding  Content-Length: 0  Keep-Alive: timeout=5, max=100  Connection: Keep-Alive  Content-Type: text/html    The file is already fully retrieved; nothing to do.$ ls # Expecting 'foo' to existindex.php$ docker exec -ti $(docker ps -lq) tail -n 4 /var/log/apache2/error.log[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP Warning:  file_put_contents(foo): failed to open stream: Permission denied in /srv/magento/index.php on line 1[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP Stack trace:[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP   1. {main}() /srv/magento/index.php:0[Mon Dec 15 17:18:49 2014] [error] [client 192.168.59.3] PHP   2. file_put_contents() /srv/magento/index.php:1

वर्चुअलबॉक्स पर, कम से कम, ऐसा लगता है आप किसी शेयर का स्वामित्व नहीं बदल सकते. चूंकि बूट 2 डॉकर उन अधिकांश डेवलपर्स के लिए वर्चुअलबॉक्स का उपयोग करता है जिनका मैं समर्थन करने की कोशिश कर रहा हूं, इसलिए मैं अपनी समस्या को हल करने की उम्मीद नहीं कर सकता chown. अगर मैं उपयोग कर सकता तो मेरी समस्या मुश्किल नहीं होगी डॉकर वॉल्यूम कंटेनर, लेकिन यह डेवलपर उपयोग को बाधित करता है । तो मैं एक और समाधान के साथ आया हूं: मैंने एक स्क्रिप्ट लिखी है कि अपाचे चलाता है क्योंकि जो भी उपयोगकर्ता वेबरोट का मालिक है.

इसका मांस है:

#!/bin/bash...adduser --system --uid=$(stat -c %u .) "$owner"echo "APACHE_RUN_USER=$owner" >> /etc/apache2/envvars

यदि आप उन्हें हरा नहीं सकते हैं, तो उनसे जुड़ें ।