डॉकर के माध्यम से अधिक जटिल एप्लिकेशन चलाने के अपने पहले प्रयास में, मैंने Symfony Demo ऐप को चुना और एक असेंबल किया docker इसे समायोजित करने के लिए संरचना का निर्माण करता है।
- पहली छवि httpd है: यह रूट के रूप में चलती है (बाद में www-डेटा पर गिरती है) और 'सर्वर' कस्टम नेटवर्क के माध्यम से बात करती है।
- दूसरी छवि PHP (fpm) है: यह रूट के रूप में चलती है (बाद में www-data पर गिरती है) और 'सर्वर' कस्टम नेटवर्क के माध्यम से भी बात करती है।
- तीसरी छवि संगीतकार है: यह यूआईडी और जीआईडी 1000 के रूप में चलती है। इसका प्रवेश बिंदु कमांड
composer create-project symfony/symfony-demo symfony-demo
है - सभी कंटेनर समान बाइंड माउंट साझा करते हैं, जहां सिम्फनी-डेमो ऐप स्थित है।
फिर मैं सिम्फनी त्रुटि के साथ समाप्त करने के लिए ब्राउज़र में स्थानीयहोस्ट: 8080 पर जाता हूं:
The stream or file "/usr/local/apache2/htdocs/symfony-demo/var/log/dev.log" could not be opened: failed to open stream: Permission denied
बात यह है कि... उल्लिखित यह फ़ाइल /var/log/ पर भी मौजूद नहीं है। वह फ़ोल्डर खाली है।
बाइंड माउंट की सभी फाइलों में 1000:1000 (मेरा उपयोगकर्ता यूआईडी/जीआईडी) की अनुमति है और इस तरह से कॉन्फ़िगर किया गया है: -rw-r--r--
।
मैंने httpd और php को इस रूप में चलाने का प्रयास किया है: UID 33 (www-data) और GID 33; यूआईडी 0 (रूट) और जीआईडी 33 (और इसके विपरीत); और 1000:1000 या 1000:33 के रूप में भी, लेकिन इन सभी संयोजनों (जब वे सफलतापूर्वक शुरू करने के लिए httpd/php प्राप्त करते हैं) के परिणामस्वरूप एक ही त्रुटि होती है।
Docker-compose.yml:
version: "3"
services:
httpd:
build: "./httpd/"
container_name: "webserver"
depends_on:
- php
ports:
- "8080:80"
networks:
- server
volumes:
- ../app:/usr/local/apache2/htdocs/
php:
build: "./php/"
depends_on:
- composer
container_name: "php"
networks:
- server
volumes:
- ../app:/usr/local/apache2/htdocs/
composer:
build: "./composer/"
container_name: "composer"
user: "1000:1000"
volumes:
- ../app:/usr/local/apache2/htdocs/
networks:
server:
driver: bridge
संगीतकार डॉकरफाइल:
FROM composer:1.8
WORKDIR /usr/local/apache2/htdocs/
CMD ["composer", "create-project", "symfony/symfony-demo", "symfony-demo"]
Httpd डॉकरफाइल:
FROM httpd:2.4
COPY ./config/httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./config/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
COPY ./config/php-fpm.conf /usr/local/apache2/conf/extra/php-fpm.conf
WORKDIR /usr/local/apache2/htdocs
Php डॉकरफाइल:
FROM php:7.3-fpm
RUN cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
COPY ./config/timezone.ini $PHP_INI_DIR/conf.d/
COPY ./config/www.conf /usr/local/etc/php-fpm.d/www.conf
RUN apt-get update && \
apt-get install -y libicu-dev
RUN docker-php-ext-install intl
WORKDIR /usr/local/apache2/htdocs
2 जवाब
दूसरे विचार पर: मेरा पिछला समाधान (जैसा है) आरएचईएल/फेडोरा/सेंटोस में काम नहीं करता है, क्योंकि www-डेटा डिफ़ॉल्ट रूप से वहां मौजूद नहीं है, जिसके कारण डॉकर प्रारंभ करने में विफल रहता है।
मेरा नया समाधान - डिस्ट्रो अज्ञेयवादी
सादगी के लिए, मैंने संगीतकार की एंट्रीपॉइंट स्क्रिप्ट को /app पर -rw-rw ---- अनुमतियों को सेट करने के लिए बस लिखने का फैसला किया है। इस तरह, मैं संगीतकार को उपयोगकर्ता 1000 के रूप में चला सकता हूं और उसी समूह PHP के रूप में चलता है (बस उसी के लिए एक नया उपयोगकर्ता और समूह बनाया गया था)। अब PHP प्रोजेक्ट के अंदर SQLite3 डेटाबेस फ़ाइलों को लिख सकता है और संगीतकार उपयोगकर्ता 1000 के रूप में लिखता है, जिसे मैं संपादित कर सकता हूं।
यह मूल रूप से @habibun ने कहा है, लेकिन मुझे केवल समूह लिखने की अनुमति देने की आवश्यकता है, पूर्ण लेखन अनुमति नहीं।
इस बात से अवगत रहें कि SELinux आपके बाइंड माउंट के लिए कंपोज़र राइट एक्सेस को अस्वीकार कर देगा। इस ऑपरेशन को अनुमति देने के लिए आपको SELinux को कॉन्फ़िगर करना होगा।
यह मेरा भंडार है जहां यह परियोजना संग्रहीत है, यदि आप एक संदर्भ की तलाश में हैं: https://github.com/o-alquimista/symfony-demo-docker/
उपयोगकर्ता नाम स्थान समाधान - डेबियन/उबंटू मेजबानों के लिए ठीक काम करता है
संगीतकार को उपयोगकर्ता 33 (www-data) के रूप में /app को लिखना चाहिए, और इसलिए php और httpd को विशेषाधिकार छोड़ने के बाद लिखना चाहिए। मैं user का उपयोग करके वर्तमान अनुमति सेटिंग (केवल स्वामी ही लिख सकता है) रखने में सक्षम था नामस्थान. उपयोगकर्ता www-डेटा को अब 967 और उससे आगे की सीमा में मैप किया गया है, जिसके परिणामस्वरूप उपयोगकर्ता 33 = मैं (उपयोगकर्ता 1000) होगा।
अब सभी कंटेनर लिख सकते हैं कि उन्हें कहां चाहिए, और मैं प्रोजेक्ट फाइलों को एक अनपेक्षित उपयोगकर्ता के रूप में संपादित कर सकता हूं।
बस लिखने की अनुमति दें
chmod -R 777 /usr/local/apache2/htdocs/symfony-demo/var/log/dev.log
फ़ाइल अनुमति के लिए यहाँ सिम्फनी दस्तावेज़: https://symfony.com/doc/current/setup /file_permissions.html
संबंधित सवाल
नए सवाल
symfony
सिम्फनी वेब अनुप्रयोगों के निर्माण के लिए एक PHP फ्रेमवर्क दोनों के साथ-साथ उन घटकों के एक सेट को संदर्भित करता है जिस पर फ्रेमवर्क बनाया गया है। यह टैग वर्तमान में समर्थित प्रमुख संस्करणों 3.x, 4.x और 5.x को संदर्भित करता है। वैकल्पिक रूप से आप संबंधित टैग का उपयोग करके एक सटीक संस्करण निर्दिष्ट कर सकते हैं। इस टैग का उपयोग सिम्फनी 1.x के बारे में प्रश्नों के लिए नहीं किया जाना चाहिए। कृपया इसके बजाय Symfony1 टैग का उपयोग करें।