【问题标题】:Makefile for running docker container with pseudo TTY使用伪 TTY 运行 docker 容器的 Makefile
【发布时间】:2022-09-28 00:40:36
【问题描述】:

我有以下 Makefile:

start: delete-network create-network start-container delete-network

start-container:
    docker run -it --rm --network docky docky bash

create-network:
    docker network create docky

delete-network:
    docker network remove docky 2> /dev/null || true

不幸的是,当我调用make start 时,delete-network 任务在我退出容器后被忽略。如何执行所有任务?

  • 它实际上是否被忽略了,或者它是否以某种方式失败了,而你正在压制? (删除2>/dev/null || true 是否会为您提供更多信息?)以这种方式使用 Make 会遇到一些奇怪的问题,像 shell 脚本这样的不同工具会更好吗?

标签: docker makefile


【解决方案1】:

如果运行容器并清理是目标,则可以这样做:

start: delete-network create-network start-container

start-container:
    docker run -it --rm --network alpine alpine sh; docker network remove alpine

create-network:
    docker network create alpine

delete-network:
    docker network remove alpine 2> /dev/null || true

和一个没有重复的版本:

start: create-network start-container delete-network

start-container:
    -docker run -it --rm --network alpine alpine sh

create-network:
    docker network create alpine || true

delete-network: 
    docker network remove alpine 2> /dev/null || true

【讨论】:

  • 谢谢!我想重用现有的 make 任务以避免重复。
  • @lucas 现在我想到了,您可以使用与 delete-network 相同的技巧,并始终从启动容器返回 true。然后您的解决方案将起作用并且没有重复。值得尝试。我也不喜欢重复……一般来说 ;)
  • 如何始终从启动容器返回 true?当我尝试docker run -it --rm --network docky docky bash || true 时,|| true 部分被传递给容器。
猜你喜欢
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
相关资源
最近更新 更多