我想通过使用docker build和docker run命令而不是通过compose文件启动我的docker容器。
我开始将compose文件转换为命令,但是我被卡住了。
撰写文件:
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
当我使用Kinematic手动手动添加音量时,它可以正常工作。 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": ""
}
],
答案 0 :(得分:2)
修复图像名称并使用网络而不是链接。这大致相当于你的docker-compose:
docker network create mynet
docker build -t testenvironment/node_js ./nodejs
docker build -t testenvironment/mongo ./mongo
docker run -d --network mynet -p 27017:27017 --name mongo testenvironment/mongo
docker run --network mynet -p 8080:8080 -e NODE_ENV=development -v $(pwd)/node_js:/home/app/chat --name nodejs -d testenvironment/node_js node server.js
删除您在Dockerfile中添加的VOLUME
。
正如@BMitch建议的那样,由于您使用的是D4W,请确保您正在挂载的目录位于与Docker VM共享的驱动器上。 Docker工具箱的菜单可能与这些docs:不同