ChatGPT解决这个技术问题 Extra ChatGPT

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

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

docker build -t dude/man:v2 . # Will be named dude/man:v2

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

对于任何好奇的人,使用 FROM... AS name 不起作用

s
salehinejad

如何在不使用 yml 文件的情况下构建具有自定义名称的图像:

docker build -t image_name .

如何使用自定义名称运行容器:

docker run -d --name container_name image_name

我不打算进一步评论,但问题是“如何在 Dockerfile 中设置图像名称?”不是“如何设置泊坞窗图像名称?”这个答案就在问题本身中。
我已经回过头来过几次了,这个答案有帮助,尽管在技术上是题外话
如果您在将 Dockerfile 放置在与您的映像名称相同的目录中保持一致,则可以使用 docker build -t $(basename $PWD) . 作为您的构建命令。然后,您可以使用“build”中的 CTRL-R 搜索来查找和重用该命令,而无需对其进行编辑。如果您愿意,也可以将其设为别名。
无论如何,谢谢你的回答。我花了几个小时通过互联网得到这个。我无法得到正确的答案,如果他也需要为他的容器命名,那么为他的形象命名的人就不能没有这个更进一步。
B
BMitch

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

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

也就是说,反对使用 compose 进行构建,因为这不适用于 swarm 模式部署。所以你回到你在问题中给出的运行命令:

docker build -t dude/man:v2 .

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


对此表示赞同,因为这实际上回答了第一句“Dockerfile 中不支持对图像进行标记”中的问题。只有当您知道这一点后,您才会有兴趣考虑解决方法...
S
Stanley.Goldman

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

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

然后你就跑

docker-compose build

我喜欢这个答案显示了 container_name 和 image name:tag 之间的区别。如果对发生的事情有更多的解释:“container_name”命名最终从图像中旋转出来的容器。 "image" 命名和标记创建的图像,从该图像构建容器。正如其他人所提到的,不能像 OP 所要求的那样从 Dockerfile 中指定图像名称,因此我们使用 docker-compose.yml 文件,并使用“docker-compose up -d --build”运行它
C
Cloud Cho

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


V
Varun Kumar

如果您想在构建后为 docker 图像命名,只需再次构建它,但这次给它一个名称它工作得很好

docker build -t name_of_image .