上下文
我正在为 dev env 创建一个很棒的Docker Compose。我们使用:
为我们开发的网络应用提供服务。
我们还使用一些使用NodeJS的命令行工具:
所以我有一个docker-compose.yml
和五个Dockerfile
(每个服务一个,一个包含NodeJS)。建筑工程。
Docker配置
docker-compose.yml
version: '2'
services:
web:
build: ../app-web/
ports:
- "80:80"
tty: true
# Add a volume to link php code on the host and inside the container
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
- /var/www/my_app/docker_files/docker-assistant:/usr/share/nginx/html/assistant
# Add hostnames to allow devs to call special url to open sites
extra_hosts:
- "localhost:127.0.0.1"
- "assistant.docker:127.0.0.1"
- "my_app.my_company.dev:127.0.0.1"
depends_on:
- custom-php
- custom-mysql
- custom-mongo
- custom-node
links:
- custom-php:custom-php
- custom-mysql:custom-mysql
- custom-mongo:custom-mongo
custom-php:
build: ../app-php/
ports:
- "50:50"
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
- /var/www/my_app/docker_files/docker-assistant:/usr/share/nginx/html/assistant
custom-mysql:
build: ../app-mysql/
#tty: true
volumes:
- /var/lib/mysql:/var/lib/mysql
- /var/www/my_app/sql:/usr/share/sql
environment:
- MYSQL_ROOT_PASSWORD=rootpwd
- MYSQL_DATABASE=appdb
- MYSQL_USER=app
- MYSQL_PASSWORD=apppwd
custom-mongo:
build: ../app-mongo/
volumes:
- /var/lib/mongodb:/data/db
custom-node:
build: ../app-npm/
tty: true
节点Dockerfile
FROM node:7.8.0-alpine
MAINTAINER DarckCrystale "xxx@xxx.xxx"
CMD [ "node" ]
问题
如何从Docker容器(例如Grunt)运行NodeJS命令行工具?
例如,当我需要编译SCSS而没有Docker时,我会转到我的app文件夹:
cd /var/www/my_app_folder
我跑了咕噜声:
grunt
或
grunt watch
但我无法弄清楚如何使用我的节点Docker容器执行此操作。
答案 0 :(得分:2)
使用docker exec,您可以在容器内运行命令,例如:
docker exec my-container-name grunt
更多信息:https://docs.docker.com/engine/reference/commandline/exec/
答案 1 :(得分:1)
您可以在CMD
中添加WORKDIR
和Dockerfile
来执行相同操作。有关具体示例,请尝试将其添加到Dockerfile
WORKDIR /var/www/my_app_folder
CMD grunt
// or
CMD grunt watch
有关详情,请参阅Digital Ocean的link
--------------编辑---------------
如果您想根据您的开发方案执行它,请尝试以下操作:
@darkckcrystale I see well I was giving you production level solution, well in dev case try running following
// This will list all the running containers
$ docker ps
// output
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
4c01db0b339c ubuntu:12.04 bash
17 seconds ago Up 16 seconds 3300-3310/tcp webapp
d7886598dbe2 crosbymichael/redis:latest /redis-server --dir
33 minutes ago Up 33 minutes 6379/tcp
redis,webapp/db
$ docker exec -it 4c01db0b339c grunt
// docker exec [options] [container id/name] <command>
有关详细信息,请查看此link