使用 Node.js 操作 Docker

Posted Node地下铁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Node.js 操作 Docker相关的知识,希望对你有一定的参考价值。

Docker = docker = Docker();opts = OpenStdin: ;container_opts = ;container = docker.createContainer(opts);stream = container.attach(container_opts); process.stdin.pipe(stream); stream.pipe(process.stdout); container.start();
wrapper();
以上介绍两种使用 Dockerode 替代 cli 命令的写法。
请注意作为区别于 cli 方式,使用 stream 将指令传入的方式,务必将 tty 设定成 false,在 container_opts 中添加 hijack:true
参考:https://github.com/apocas/dockerode/issues/455#issuecomment-489436370

总结
Dockerode 使用 Node.js 最擅长的方式通过 http 请求对 Docker daemon 下发指令,干净且高效。调用Dockerode 中函数的参数配置同 Docker 的官方文案。只是网上关于 Dockerode 文章不多,且使用时,有些配置有坑需要注意。
以上

node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动

我使用docker创建多个容器,其中一个包含rabbitmq实例,另一个包含应该响应队列活动的node.js操作。遍历docker-compose日志,我看到很多ECONNREFUSED错误,然后我看到该行开始表明rabbitmq已经在它的容器中启动了。这似乎表明,rabbitmq似乎是在需要它的服务之后开始的。

作为侧边栏,只是为了消除任何其他可能的原因,这是node.js连接到rabbitmq的连接字符串:

amqp://rabbitmq:5672

这里是docker-compose.yaml文件中rabbitmq的条目:

rabbitmq:
container_name: "myapp_rabbitmq"
   tty: true
   image: rabbitmq:management
   ports:
     - 15672:15672
     - 15671:15671
     - 5672:5672
   volumes:
     - /rabbitmq/lib:/var/lib/rabbitmq
     - /rabbitmq/log:/var/log/rabbitmq
     - /rabbitmq/conf:/etc/rabbitmq/
service1:
   container_name: "service1"
   build:
     context: .
     dockerfile: ./service1.dockerfile
   links:
     - mongo
     - rabbitmq
   depends_on:
     - mongo
     - rabbitmq
service2:
   container_name: "service2"
   build:
     context: .
     dockerfile: ./service2/dockerfile
   links:
     - mongo
     - rabbitmq
   depends_on:
     - mongo
     - rabbitmq

这个时间问题的解决方案是什么?

如何在消耗容器启动之前启动rabbitmq?

如果这不是时间问题,请告诉我,但是配置。我列出的docker-compose.yml条目中的问题?

答案

您需要控制从属容器的启动过程。下面的文件相同

https://docs.docker.com/compose/startup-order/

我通常使用下面项目的wait-for-it.sh文件

https://github.com/vishnubob/wait-for-it

所以我将在我的service1中有一个下面的命令

wait-for-it.sh rabbitmq:5672 -t 90 -- command with args to launch service1
另一答案

看起来你没有包含完整的docker-compose文件。我希望在compose中看到你的节点容器。我认为问题是你需要一个

 depends_on:
  - "rabbitmq"

在docker compose的节点容器部分中

关于作曲家依赖关系的更多信息:qazxsw poi

请注意,正如此页面建议您应该这样做,以使您的应用程序能够适应外部服务的中断。

以上是关于使用 Node.js 操作 Docker的主要内容,如果未能解决你的问题,请参考以下文章

node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动

Docker 容器和 Node.js 集群

当Node.js遇见Docker

使用 Java 和 Node.js 创建 Docker 容器

Node.js自动导航模式在Docker的应用

如何在基于 Node.js 镜像的 Docker 容器中使用 Let's Encrypt