【问题标题】:Run Multiple Commands In Dockerfile在 Dockerfile 中运行多个命令
【发布时间】:2020-07-31 16:52:26
【问题描述】:

我想先运行 booksServer,然后是 customersServer,然后运行 ​​main.js

但在启动 main.js 之前,我想确保 customersServer 和 booksServer 先运行。

我该如何正确地做到这一点?

这是我现在的 dockerfile

FROM node:12.14.0
WORKDIR /usr/src/app
COPY package*.json ./
COPY . /usr/src/app
RUN npm install
RUN npm install nodemon -g
EXPOSE 4555
CMD nodemon /books/booksServer.js && nodemon /customers/customersServer.js && node /main/main.js

我知道通常你想为多个进程分离容器,但我在执行此操作时遇到了 gRPC 问题...所以我现在想将其作为单个 dockerfile 尝试。

【问题讨论】:

  • 我认为你最好运行 3 个容器并尝试修复 gRPC/网络问题。 docker-compose 非常适合在本地开发中运行多个容器。
  • 同意,我决定这样做。我目前正在尝试使用 wait-for-it (github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh) 以便主服务等待服务器启动。有点困惑等待它,但浏览了一些文章
  • 作为一种解决方法,在命令之间休眠呢? nodemon a.js & sleep 10 && node.....
  • 我想我的问题是这是一个有效的 CMD 吗? CMD nodemon /books/booksServer.js && nodemon /customers/customersServer.js && node /main/main.js
  • 根据the docs看来是有效的

标签: docker dockerfile docker-machine docker-registry


【解决方案1】:

假设booksServer.jscustomersServer.js 提供通信端口,您可以使用this 脚本。该脚本通常用于等待另一个服务准备好使用。

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2019-07-17
    • 2022-12-12
    • 2021-01-29
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多