我的应用程序(Laravel)在Docker容器中运行。
我现在正在尝试使用Laravel Mix来编译我的资产。为此,我需要node和npm,因此,我试图使用一个单独的容器来做到这一点。
我的Dockerfile包含以下内容:
FROM node:8
我的docker-compose:
mix:
build:
context: ./docker/mix
args:
- DOCKER_ENV=${DOCKER_ENV}
container_name: mix
volumes:
- ${PROJECT_PATH}/src:/srv/app
environment:
- DOCKER_ENV=${DOCKER_ENV}
- APP_DEBUG=${APP_DEBUG}
当我尝试构建时,我不断从此容器获取退出代码0。
我只是想要一个容器来建立我的资产,我在做正确的事情。
答案 0 :(得分:1)
您需要运行一个进程来使容器保持活动状态。一种常见的方法是连续运行Shell脚本或命令。尝试将其添加到dockerfile的末尾:
CMD ["tail", "-f", "/dev/null"]
答案 1 :(得分:1)
当尝试在docker节点映像中运行laravel mix时,我们遇到了相同的问题。图像停止运行或无法安装node_modules。
经过一番挖掘,我们找到了使用入口点的解决方案,该方法可用于覆盖docker映像的默认运行命令。
我们创建了一个入口点,该入口点在docker-compose up -d上调用npm run watch-poll,入口点文件如下所示:
#file:docker/init-scripts/node_start.sh
#!/bin/sh
set -e
echo 'running prestart node script'
echo 'running npm install'
npm install
echo 'initialization done, start watching'
npm run watch-poll
然后在docker-compose.yml中这样调用:
node:
image: node:10-alpine
container_name: node
working_dir: /usr/src/app
volumes:
- ./htdocs:/usr/src/app
- ./docker/init-scripts/:/init-scripts/
entrypoint:
- /init-scripts/node_start.sh
depends_on:
- 'app'
我们将整个解决方案放置在github上,位于以下位置:https://github.com/jva91/docker-laravel-mix