Docker-compose и узел-контейнер как не основной - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в Docker и успешно настроил PHP / Apache / MySQL.Но как только я пытаюсь добавить контейнер node (чтобы использовать npm), он всегда закрывает контейнер при компоновке.И да, я понимаю, что могу использовать node напрямую, без участия docker, но я считаю это полезным для себя.

А что касается composer, я хочу использовать тома в nodeконтейнер для сохранения node_modules внутри папки src.

Я составляю его с помощью команды docker-compose up -d --build.Во время компоновки он не показывает ошибок (даже контейнер node, кажется, успешно собран).Если это может помочь, я могу поделиться файлом журнала (он слишком велик, чтобы включать его здесь).

PS.Если вы найдете что-то, что можно улучшить, пожалуйста, дайте мне знать.Заранее спасибо!

Dockerfile

FROM php:7.2-apache
RUN apt-get update
RUN a2enmod rewrite

RUN apt-get install zip unzip zlib1g-dev
RUN docker-php-ext-install pdo pdo_mysql mysqli zip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer global require laravel/installer
ENV PATH="~/.composer/vendor/bin:${PATH}"

docker-compose.yml

version: '3'

services:
  app:
    build:
      .
    volumes:
      - ./src:/var/www/html
    depends_on:
      - mysql
      - nodejs
    ports:
      - 80:80

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerty

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - mysql:db
    ports:
      - 8765:80
    environment:
      MYSQL_ROOT_PASSWORD: qwerty
      PMA_HOST: mysql
    depends_on:
      - mysql

  nodejs:
    image: node:9.11
    volumes:
      - ./src:/var/www/html

1 Ответ

0 голосов
/ 18 мая 2018

Поскольку этот Dockerfile, который вы используете, показывает, вы фактически не запускаете какое-либо приложение в контейнере узла, поэтому, как только оно создается и запускается - оно закрывается, потому что ему больше нечего делать.

Решение простое - укажите приложение, которое вы хотите запустить в контейнер, и запустите его следующим образом:

Я изменил часть вашего композитного файла

  nodejs:
    image: node:9.11
    command: node app.js
    volumes:
      - ./src:/var/www/html

Где app.js - скрипт, в котором написано ваше приложение, вы можете использовать свое имя.

edit с небольшим улучшением, о котором вы просили

Вы не ждете, пока ваша база данных будет полностью инициализирована (depends_on на это не способен), поэтому взгляните на один из моих предыдущих ответов, касающихся этой проблемы здесь

...