如何在Dockerfile中设置图像名称?

gvl*_*sov 244 tags docker dockerfile

您可以在构建自定义图像时设置图像名称,如下所示:

docker build -t dude/man:v2 . # Will be named dude/man:v2
Run Code Online (Sandbox Code Playgroud)

有没有办法在Dockerfile中定义图像的名称,所以我不必在docker build命令中提及它?

sal*_*jad 260

如何使用自定义名称构建图像而不使用yml文件:

docker build -t image_name .
Run Code Online (Sandbox Code Playgroud)

如何运行具有自定义名称的容器:

docker run -d --name container_name image_name
Run Code Online (Sandbox Code Playgroud)

  • 我已经回过头几次,这个答案有所帮助,尽管技术上偏离主题 (62认同)
  • 我不打算进一步评论,但问题是"如何在Dockerfile中设置图像名称?" 不是"如何设置泊坞窗图像名称?" 答案就在于问题本身. (61认同)
  • 如果将`Dockerfile`放在与图像名称相同的目录中是一致的,可以使用`docker build -t $(basename $ PWD).`作为构建命令.然后,您可以使用"build"中的CTRL-R搜索来查找并重用该命令,而不必编辑它.如果您愿意,也可以将其设为别名. (6认同)

BMi*_*tch 213

Dockerfile中不支持标记图像.这需要在构建命令中完成.作为一种变通方法,您可以使用标识目标映像名称的docker-compose.yml进行构建,然后运行docker-compose build.一个示例docker-compose.yml看起来像

version: '2'

services:
  man:
    build: .
    image: dude/man:v2
Run Code Online (Sandbox Code Playgroud)

也就是说,由于无法使用swarm模式部署,因此推动使用compose进行构建.所以你回到运行命令,正如你在问题中给出的那样:

docker build -t dude/man:v2 .
Run Code Online (Sandbox Code Playgroud)

就个人而言,我倾向于在我的文件夹(build.sh)中使用一个小的shell脚本构建,该脚本传递任何args并包含图像的名称以保存键入.对于生产,构建由ci/cd服务器处理,该服务器在管道脚本中具有图像名称.

  • 赞成这一点,因为这实际上回答了第一句话“Dockerfile 内不支持标记图像”中的问题。只有当您知道这一点时,您才会有兴趣考虑解决方法...... (13认同)

Dav*_*han 32

如果您必须引用特定的docker文件,这是另一个版本:

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest
Run Code Online (Sandbox Code Playgroud)

然后你就跑了

docker-compose build
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案显示了容器名称和图像名称:标签之间的区别。如果对正在发生的事情有更多解释就好了:“container_name”命名最终从图像中旋转出来的容器。“image”对创建的图像进行命名和标记,容器是根据该图像构建的。正如其他人提到的,正如OP所要求的那样,无法从 Dockerfile 中指定映像名称,因此我们使用 docker-compose.yml 文件代替,并使用“docker-compose up -d --build”运行它 (3认同)

小智 18

Dockerfile唯一的解决方案是添加一个 shebang 行:

#!/usr/bin/env -S docker build . --tag=dude/man:v2 --network=host --file

FROM ubuntu:22.04
# ...
Run Code Online (Sandbox Code Playgroud)

然后chmod +x Dockerfile就是./Dockerfile走。我什至添加更多docker build命令行参数,例如指定主机网络。

注意:env支持-S/--split-string仅适用于较新的 coreutils 版本。


Clo*_*Cho 8

使用特定的 Dockerfile,您可以尝试:
docker build --tag <Docker Image name> --file <specific Dockerfile> .
例如
docker build --tag second --file Dockerfile_Second .