我是 Docker 新手,并且已成功设置 PHP/Apache/MySQL。但是一旦我尝试添加 node
容器(为了使用 npm
)它总是在组合时关闭容器。是的,我知道我可以使用 node
直接不涉及docker
,但我发现它对我自己很有用。
至于composer
,我想使用 node
中的卷容器以便持久node_modules
src
里面文件夹。
我使用 docker-compose up -d --build
来编写它命令。
在编写过程中,它没有显示任何错误(甚至 node
容器似乎已成功构建)。
如果有帮助,我可以共享日志文件(它太大,无法包含在此处)。
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/