2017-06-19 286 views
1

我想通过使用docker build和docker run命令而不是通过组合文件来启动我的docker容器。将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 

我已经更换卷到dockerfile如下:

FROM node:4.3.2 

RUN useradd --user-group --create-home --shell /bin/false app &&\ 
    npm install --global [email protected] 

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 --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 

当我手动添加使用动态接口它工作正常体积。 泊坞检查结果:

"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": "" 
     } 
    ], 

回答

2

修复图像名称,并使用网络,而不是链接。这大致相当于你的搬运工,撰写:

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虚拟机共享的驱动器上。对于泊坞窗工具箱菜单可以从这些docs不同: enter image description here

+0

谢谢@Robert您anwser,它已经帮助了很多,但我它仍然没有相当的工作。我已经对Node.js的docker run命令做了一些修改:1.我使用了绝对路径而不是$(pwd),因为它不起作用(我认为它有一些与我一起使用Docker toolbox for windows) 。 2.我添加了第二卷,我想你只添加了一个(对不对?)。但是,当我启动nodejs容器时,出现以下错误:'错误:无法找到模块'/ home/app/chat/server.js'。 – Jan

+0

我使用的运行命令是:'docker run --network mynet -p 8080:8080 -e NODE_ENV = development -v/home/app/chat/node_modules -v // c/path/to/node_js:/ home/app /聊天 - 名称node_js -d testenvironment/node_js节点server.js' – Jan

+0

您的音量源存在于您的Windows'家目录吗?我相信这不是默认允许的,否则 – Robert

相关问题