node.js - Docker-compose 和 Node 容器不是主要容器

标签 node.js docker docker-compose

我是 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

最佳答案

this您正在使用的 Dockerfile 显示,您实际上并未在 Node 容器中运行任何应用程序,因此一旦它构建并启动 - 它就会关闭,因为它没有其他事情可做。

解决方案很简单 - 提供一个您想要在容器中运行的应用程序并运行它,如下所示:

我修改了您撰写文件的一部分

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

其中 app.js 是编写您的应用程序的脚本,您可以自由使用自己的名称。

编辑提供您要求的小改进

您不会等到数据库完全初始化(depends_on 无法做到这一点),因此请查看我之前处理该问题的答案之一 here

关于node.js - Docker-compose 和 Node 容器不是主要容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50397270/

相关文章:

javascript - 串口不工作?

javascript - Node.js NODE_PATH 环境变量

docker - CMD 在 Dockerfile 中的 ENTRYPOINT 后不运行

docker services.web.working_dir 包含无效类型,它应该是一个字符串

node.js - 如何使用express和typeorm正确更新实体

node.js - Docker 暴露不工作

linux - unzip在Android NDK zip上返回非零代码2(已测试多个版本)

docker - 通过命令行为Docker Compose创建自定义网络

Jenkins 的 Dockerfile

azure - 如何使用特权选项在 Azure 应用服务中运行 docker 镜像?