2017-02-11 5 views
0

Я пытаюсь построить две службы с докер-композитором. Первый сервис (приложение) представляет собой простой контейнер тома, а второй (php-pm) является диспетчером процессов PHP. Проблема в том, что моя вторая служба пытается получить доступ к папке Symfony, которая используется первой службой. По какой-то причине папка не существует до тех пор, пока не будут созданы обе службы.Объемы обмена между док-услугами

докер-compose.yml

application: 
    image: tianon/true 
    volumes: 
     - /home/Projects/symfony-pm:/var/www/symfony-pm 
     - /home/Projects/symfony-pm/app/logs:/var/www/symfony-pm/app/logs 
php-pm: 
    build: ./ 
    dockerfile: dockerfile-php-pm 
    ports: 
     - 9999:9000 
    volumes_from: 
     - application 
    stdin_open: true 
    tty: true 

второй сервис dockerfile

FROM ubuntu:16.04 

#INSTALL PHP AND HIS DEPENDENCIES 
RUN apt-get update && \ 
    apt-get install -y php7.0-cgi php-xml && \ 
    ln -s /usr/lib/cgi-bin/php /usr/bin/php7.0-cgi 

#INSTALL COMPOSER 
RUN apt-get install -y curl && \ 
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ 
    chmod +x /usr/local/bin/composer 

#INSTALL PPM 
RUN apt-get install -y git && \ 
    cd var && \ 
    git clone https://github.com/php-pm/php-pm.git && \ 
    cd php-pm && \ 
    composer install && \ 
    ln -s `pwd`/bin/ppm /usr/local/bin/ppm 


#This folder doesn't exist, why?? 
RUN cd /var/www/symfony-pm &&/
    composer require php-pm/php-pm:dev-master &&/
    composer require php-pm/httpkernel-adapter:dev-master &&/
    composer install 

Последняя команда не работает. сообщение об ошибке не может получить доступ к '/ var/www/symfony-pm': нет такого файла или каталога.

Каталог существует, потому что я проверил после того, как были созданы обе службы.

+0

Где ваш dockerfile? –

ответ

0

Папка не существует, потому что volumes_from монтирует каталог при запуске контейнера. Но вы пытаетесь получить к нему доступ во время сборки изображения контейнера.

Что бы я сделал это COPY содержание /home/Projects/symfony-pm во время сборки:

COPY /home/Projects/symfony-pm /var/www/symfony-pm 
RUN composer require ... 

Теперь каждый раз, когда вы обновляете ваше приложение, вам нужно будет восстановить изображение.

Другая возможность состоит в том, чтобы иметь composer запуск при старте контейнера с помощью ENTRYPOINT:

entrypoint.sh:

#!/bin/sh 
cd /var/www/symfony-pm && composer ... 

Dockerfile:

COPY entrypoint.sh/
ENTRYPOINT /entrypoint.sh 
Смежные вопросы