如何运行 NodeJS命令行工具里面Docker?
How to run NodeJS command-line tools inside Docker?
上下文
我正在为我们的 开发环境 创建一个大的 Docker Compose。我们使用:
- nginx
- PHP
- MySQL
- MongoDB
为我们开发的网络应用提供服务。
我们还使用了一些使用 NodeJS 的命令行工具:
- G运行t(编译SCSS)
- JSHint
所以我有一个 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 容器(例如 G运行t)中 运行 NodeJS 命令行工具?
例如,当我需要编译 SCSS 时,没有 Docker,我转到我的应用程序文件夹:
cd /var/www/my_app_folder
我运行g运行t:
grunt
或
grunt watch
但我无法弄清楚如何使用我的节点 Docker 容器执行此操作。
您可以通过在 Dockerfile
中添加 CMD
和 WORKDIR
来实现同样的效果。对于您的具体示例,请尝试将其添加到您的 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
使用 docker exec,您可以 运行 在容器内执行命令,例如:
docker exec my-container-name grunt
更多信息:https://docs.docker.com/engine/reference/commandline/exec/
上下文
我正在为我们的 开发环境 创建一个大的 Docker Compose。我们使用:
- nginx
- PHP
- MySQL
- MongoDB
为我们开发的网络应用提供服务。
我们还使用了一些使用 NodeJS 的命令行工具:
- G运行t(编译SCSS)
- JSHint
所以我有一个 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 容器(例如 G运行t)中 运行 NodeJS 命令行工具?
例如,当我需要编译 SCSS 时,没有 Docker,我转到我的应用程序文件夹:
cd /var/www/my_app_folder
我运行g运行t:
grunt
或
grunt watch
但我无法弄清楚如何使用我的节点 Docker 容器执行此操作。
您可以通过在 Dockerfile
中添加 CMD
和 WORKDIR
来实现同样的效果。对于您的具体示例,请尝试将其添加到您的 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
使用 docker exec,您可以 运行 在容器内执行命令,例如:
docker exec my-container-name grunt
更多信息:https://docs.docker.com/engine/reference/commandline/exec/