如何定义使用docker-compose构建的镜像名称

419

我正在使用docker-compose创建我的开发环境。我想要构建一个特定的镜像,但是我不知道如何为该镜像设置名称。

wildfly:
  build: /path/to/dir/Dockerfile
  container_name: wildfly_server
  ports:
   - 9990:9990
   - 80:8080
  environment:
   - MYSQL_HOST=mysql_server
   - MONGO_HOST=mongo_server
   - ELASTIC_HOST=elasticsearch_server
  volumes:
   - /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
  links:
   - mysql:mysql_server
   - mongo:mongo_server
   - elasticsearch:elasticsearch_server

我执行docker-compose时一切正常,但新镜像的名称是随机的。是否可以为构建的镜像设置名称?


49
如果你使用docker-compose构建镜像,那么镜像名称始终将是<project>_<service>,其中<service>在此示例中为“wildfly”,而项目默认为您所在的目录名称。您可以使用-pCOMPOSE_PROJECT_NAME环境变量更改它。但是无法设置自定义镜像名称。 - dnephin
2
没有可接受的答案吗? - AmanicA
https://docs.docker.com/docker-cloud/apps/service-links/ - 关于此主题的官方文档 - Ivan Aracki
10
您可以在.env文件中设置COMPOSE_PROJECT_NAME=x,这样您的容器将被命名为{x}_{service}_{#} - eMPee584
1
注意:由于 Docker 容器名称必须唯一,如果您指定自定义名称,则无法将服务扩展到超过 1 个容器。尝试这样做会导致错误。文档链接 - aderchox
12个回答

0
如果使用Jenkins,项目名称可以使用stackName = prefix进行定义。
jenkins:
stackName = 'foo'

docker:

services:
  bar:

因此名称变为foo_bar


0
如果您同时指定了图像和构建,则Compose将使用image中指定的webapp和可选标签命名构建的图像:
image: webapp:tag

在 docker-compose 文件中,看起来像是这样。
version: '3.9'
services:
  
  node-ecom:
    build: .
    image: "webapp:tag"
    container_name: node-ecom
    ports:
      - "4000:3000"
    volumes:
      - ./:/app:ro
      - /app/node_modules
      - /config/.env
    env_file:
      - ./config/.env

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接