【问题标题】:How could you name your docker images based on directory name?您如何根据目录名称命名您的 docker 镜像?
【发布时间】:2021-02-02 22:25:00
【问题描述】:

我希望更频繁地使用 docker,我最终得到了一个有点像的模板目录结构:

My-New-Project/
    |- Dockerfile
    |- build.sh
    |- start.sh
    |- src/...

其中build.shstart.sh 只是通常的docker build -t my-new-project .docker run -p 8888:8888 -v $(pwd):/workdir my-new-project

但是,我需要为每个新项目修改 build.shstart.sh 中的图像名称 - 我如何使用 bash 根据目录基本名称设置图像名称。

另外,如果有针对我正在做的事情的最佳做法,请告诉我。

【问题讨论】:

  • 我觉得你的方法有点好,也许我会试试。但现在,我使用这个approach。关于您的 bash 问题:您是否尝试探索 basename 命令?

标签: bash docker dockerfile


【解决方案1】:

结合来自How to set image name in Dockerfile?Get current directory name (without full path) in a Bash script 的答案,您需要在build.sh 和start.sh 中做的就是:

docker build -t "${PWD##*/}"docker run -p 8888:888 -v $(pwd):/workdir "${PWD##*/}"

或者,假设您还需要名称为小写,如您的示例 (How to convert a string to lower case in Bash?):

dirname=${PWD##*/}

docker build -t "${dirname,,}"

${PWD##*/}使用shell参数扩展将其他目录从路径中删除,,,是另一个将大写转换为小写的。

【讨论】:

  • 请注意${dirname,,} 仅适用于 Bash 4+。糟糕的 macOS 用户仍然在使用开箱即用的 Bash 3.x。另一个参数扩展兼容任何 shell、Bash 或 POSIX sh
  • 谢谢,这看起来很棒——除了我是一个可怜的 macOS 用户——你如何在 bash 3.x 中转换为小写?
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 2021-01-05
  • 2018-12-07
  • 1970-01-01
  • 2016-10-18
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多