将docker-compose文件转换为构建和运行命令

时间:2017-06-19 11:26:57

标签: node.js docker docker-compose dockerfile

我想通过使用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": ""
        }
    ],

1 个答案:

答案 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不同 enter image description here