【发布时间】:2017-06-19 11:26:57
【问题描述】:
我想通过使用 docker build 和 docker run 命令而不是通过 compose 文件来启动我的 docker 容器。
我开始将撰写文件转换为命令,但我卡住了。
编写文件:
version: '2'
services:
node:
build: ./node_js
command: node server.js
depends_on:
- mongo
links:
- mongo
environment:
NODE_ENV: development
ports:
- '8080:8080'
volumes:
- ./node_js:/home/app/chat
- /home/app/chat/node_modules
mongo:
build: ./mongo
ports:
- "27017:27017"
这就是我目前的想法
构建命令(运行时有效):
docker build --tag testenvironment/node_js ./node_js
运行命令:
docker run -p 8080:8080 --link mongoDB:testenvironment/mongo --name nodejs -d testenvironment/mongo node server.js
我已将 VOLUMES 替换为 dockerfile,如下所示:
FROM node:4.3.2
RUN useradd --user-group --create-home --shell /bin/false app &&\
npm install --global npm@3.7.5
ENV HOME=/home/app
COPY package.json npm-shrinkwrap.json $HOME/chat/
RUN chown -R app:app $HOME/*
USER app
WORKDIR $HOME/chat
RUN npm install
VOLUME ./node_js:/home/app/chat
VOLUME /home/app/chat/node_modules
CMD ["node", "index.js"]
我虽然这就是一切,但是当我运行命令时,Node.js 会立即启动和停止。谁能告诉我我做错了什么或错过了什么。
如果您想了解更多信息,请询问。
提前致谢!
我想我找到了解决办法。在运动学中环顾四周时,我找到了容器卷的 UI,但它没有显示本地文件夹,所以我手动添加了它。
这是否意味着挂载卷的命令不正确?
我使用的最后一个 docker run 命令:
docker run --network mongo_node_network -p 8080:8080 -e NODE_ENV=development -v //c/path/to/node_js:/home/app/chat -v /home/app/chat/node_modules --name node_js -d testenvironment/node_js node index.js
当我使用运动学界面手动添加音量时,它工作正常。 Docker 检查结果:
"Mounts": [
{
"Type": "bind",
"Source": "/c/Users/Jan/Desktop/PrototypeEnvironment/Software/PrototypeEnvironment/TestEnvironmentBuildTest/node_js",
"Destination": "/home/app/chat",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "bind",
"Source": "/mnt/sda1/var/lib/docker/volumes/df707fea2364811c9377276e8fdbbd16d9af55720475f436b6206e77806bdb50/_data",
"Destination": "/home/app/chat/node_modules",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
【问题讨论】:
标签: node.js docker docker-compose dockerfile