डॉकर के माध्यम से अधिक जटिल एप्लिकेशन चलाने के अपने पहले प्रयास में, मैंने 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
crimson_king 5 जुलाई 2019, 19:02

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) होगा।

अब सभी कंटेनर लिख सकते हैं कि उन्हें कहां चाहिए, और मैं प्रोजेक्ट फाइलों को एक अनपेक्षित उपयोगकर्ता के रूप में संपादित कर सकता हूं।

0
crimson_king 11 जुलाई 2019, 03:53

बस लिखने की अनुमति दें

chmod -R 777 /usr/local/apache2/htdocs/symfony-demo/var/log/dev.log

फ़ाइल अनुमति के लिए यहाँ सिम्फनी दस्तावेज़: https://symfony.com/doc/current/setup /file_permissions.html

1
habibun 5 जुलाई 2019, 20:13