【问题标题】:docker-compose does not override a command using the start commanddocker-compose 不会使用 start 命令覆盖命令
【发布时间】:2017-04-05 16:14:08
【问题描述】:

我有一个 docker-compose 覆盖文件用于在容器上运行测试。我想用不同的命令启动我的节点服务器 - nyc node server.js。我有一个 docker-compose.coverage.yml 文件,它会覆盖普通的撰写文件,如下所示:

node:
    command: nyc node server.js

但是,当我执行docker-compose -f docker-compose.yml -f docker-compose.coverage.yml start node 时,它似乎永远不会覆盖命令。当我使用docker-compose run 时,它会覆盖命令,但服务会退出。有谁知道为什么它不会使用 start 覆盖命令?

【问题讨论】:

  • 我在想,由于 CMD 是已构建容器的一部分,因此无法覆盖它,但无论 CMD 如何,run 都在容器中执行单独的命令?只是一种预感......
  • 谢谢,我试试
  • 成功了!谢谢。
  • 既然您确认它有效,我将其发布为答案。
  • 我看到你有一个风险规避策略来避免堆栈溢出;)

标签: node.js docker docker-compose


【解决方案1】:

docker-compose start 将启动一个现有已停止的容器。现有容器中已经包含该命令,您无法更改它。

你想要做的是使用docker-compose up。这将寻找对 docker-compose.yml 的更改,如果有任何更改,它将使用新选项重新创建容器,然后启动或重新启动它。

所以你想要这样的东西:

docker-compose -f docker-compose.yml -f docker-compose.coverage.yml up -d node

【讨论】:

  • 感谢您的解释,如果您在答案中包含“--no-recreate”会很好。它在哪里?
  • @EralpB 我不确定我现在是否理解 --no-recreate 在这个答案中是否有用;答案的重点是在发生更改时需要重新创建容器(而不是简单地重新启动现有容器)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2021-06-12
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多