【问题标题】:Run project dependencies commands from dockerfile从 dockerfile 运行项目依赖项命令
【发布时间】:2017-02-21 09:58:30
【问题描述】:

我有一个 laravel 项目需要:

  • mysql数据库镜像
  • mongo 数据库图片
  • 依赖项:npm、composer、gulp、bower

所以我创建了一个docker-compose.yml,其中包含 3 个服务:

version: '2.0'

services:
  db-mysql:
    image: mysql
    environment:
      - "MYSQL_DATABASE=app_db"
      - "MYSQL_USER=db_user"
      - "MYSQL_PASSWORD=nutella"
      - "MYSQL_ROOT_PASSWORD=choco" 
  db-mongo:
    image: mongo
  app:
    volumes:
      - C:\Users\svirl\Documents\workspace\app-web:/var/www/html/:rw
    build: app
    links:
      - db-mysql
      - db-mongo
    ports:
      - 32772:80
    depends_on:
      - db-mysql
      - db-mongo

好的,对于我的应用,我有一个带有 Dockerfile 的构建:

FROM php:5.6-apache
WORKDIR /var/www/html/

RUN apt-get update

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install #*
RUN apt-get install npm
RUN npm install #*
RUN npm install -g bower
RUN bower install --allow-root
RUN npm install -g gulp
RUN gulp

但当然,像#* 这样的一些命令将无法正常工作,因为 VOLUME 未安装且文件尚不存在,并且会抛出如下错误:

Composer could not find a composer.json file in /var/www/html

那么对于这种情况有哪些解决方案呢?为了让我的项目运行,我需要在容器创建时运行这些命令。

【问题讨论】:

  • 嗨!看看nodejs.org/en/docs/guides/nodejs-docker-webapp,这是 dockerize 应用程序的最佳示例。它只是一个节点应用程序,但您可以将它与其他语言一起使用。 ;)
  • 正如我在其他问题中所说,将代码复制到容器内并不比使用 docker-compose 创建卷具有排他性。

标签: mysql mongodb docker docker-compose dockerfile


【解决方案1】:

使用命令 (composer install, npm install...) 编写一个 shell 脚本,并将该脚本作为 ENTRYPOINT 放入您的 Dockerfile

【讨论】:

  • 我尝试使用ENTRYPOINT composer install && npm install && /bin/sh -c,但容器不再启动。
  • 写一个 shell 脚本,COPY 到镜像,让它可执行然后设置ENTRYPOINT /path/to/script.sh
  • 另外,请提供更多细节。有任何错误信息吗? docker logs docker ps -a 说什么?
猜你喜欢
  • 2019-06-27
  • 2019-07-04
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多