在Docker容器中运行Laravel Mix

时间:2018-06-26 13:45:47

标签: node.js laravel docker npm

我的应用程序(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。

我只是想要一个容器来建立我的资产,我在做正确的事情。

https://laravel.com/docs/5.6/mix#running-mix

2 个答案:

答案 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