Docker-compose构建镜像或构建上下文

49

我想构建自定义的Dockerfile,但是我遇到了这个错误信息:

--> 开始构建应用程序 ERROR: The Compose file is invalid because: Service app has neither an image nor a build context specified. At least one must be provided.

我不理解为什么名称是 app。你可以看看我的docker-compose.yml文件:

version: "3"

services:
  webapp-react:
    build:
      context: ./docker/nodejs
      dockerfile: Dockerfile
    image: webapp/react
    container_name: webapp_react
    user: ${UID}:${GID}
    environment:
      - NODE_ENV=build

  webapp-nginx:
    build:
      context: ./docker/nginx
      dockerfile: Dockerfile
    image: webapp/nginx
    container_name: webapp_nginx
    environment:
      - VIRTUAL_HOST=${SITE_URL}
      - VIRTUAL_PORT=8080
      - VIRTUAL_NETWORK=nginx-proxy
      - LETSENCRYPT_HOST=${SITE_URL}
      - LETSENCRYPT_EMAIL=${MAILER_DEFAUT_SENDER_ADDRESS}
    ports:
      - "8181:80"
    volumes:
      - ./app/build:/www-data/

networks:
  default:
    external:
      name: nginx-proxy

有人知道我哪里出错了吗?

谢谢!


我无法让那个YAML文件导致那个错误。 - David Maze
3
不知道为什么这个问题被标记为无效问题。它是完全有效的。也许审核人员不了解Docker。 - geoidesic
11个回答

40
在我的情况下,我已经在 docker-compose.yml 文件中重命名了服务,但是忘记在 docker-compose.override.ymldocker-compose.vs.release.yml 中进行相同的操作。

14
以下内容适用于使用docker-compose的所有地方。我以Visual Studio Docker工具为参考。 快速答案:仔细查看错误描述中提到的“已定义服务”的docker-compose.override.yml文件引用,然后将其删除。错误提示您在override文件中定义了一个服务,但在基本的docker-compose文件中没有。使用Visual Studio重现此问题。我在我的docker-compose中遇到了同样的问题。Visual Studio也默认填充docker-compose.override.yml。当您附加服务时,就像@Jorn.Beyers提到的那样,如果您正在使用Visual Studio的Docker工具,则可以轻松复制它。运行docker-compose之后开始删除docker-compose.yml中的服务或服务。会出现OP的错误描述。 我是如何解决这个问题的?我找到了docker-compose所在的位置。我发现有一个docker-compose.override.yml文件。它仍然引用我删除的服务。因此,我定位了我的docker-compose.override.yml中的服务。在下面的情况下,我仍然引用sth.blog.api。
sth.blog.api:
environment:
  - ASPNETCORE_ENVIRONMENT=Development
  - ASPNETCORE_URLS=https://+:443;http://+:80
ports:
  - "80"
  - "443"
volumes:
  - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
  - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro

看起来与上面类似。删除这些行后,我重新启动了docker-compose,一切正常运行。

注意:

由于我使用Visual Studio及其神奇的自动生成工具,我猜这个错误主要出现在那里,可能会让初学者感到不知所措,因为错误描述会给出以上错误,并且单击错误时会带您转到非常奇怪的文件而不是问题的源代码位置。

有关Visual Studio中容器工具的更多信息:https://learn.microsoft.com/en-us/visualstudio/containers/?view=vs-2019


在我的情况下,我已经在docker-compose.yml中更改了服务名称,但是在docker-compose.override.yml中没有这样做。 - Dave Becker

9

当我从Visual Studio 2019的docker-compose和docker-compose-override文件中删除一些应用程序时,遇到了相同的问题。在再次运行docker-compose之前清理解决方案对我有用。


6
"清理解决方案"是做什么的?我想手动执行同样的操作,因为我没有Visual Studio。 - dcorking
2
@dcorking,我认为在Visual Studio中清理解决方案将运行“docker-compose down”并删除所有现有的容器和镜像。 - adam0101

8
在我的情况下,我将服务添加到 docker-compose.override.yml 文件中,但是忘记将其添加到 docker-compose.yml 文件中。

3

我也遇到了类似的问题,我采用了两种可能的解决方法的组合。

  1. 我将想要的代码从 docker-compose.yml 复制并粘贴到 docker-compose.override.yml 中,以使这两个代码相同。
  2. 然后我清理了解决方案,并最终运行了 "docker-compose up" 命令。

之后它开始在 Docker 中生成一个镜像。我希望这能帮助任何遇到类似情况的人。


2

确保你的docker-compose运行的是正确的版本。例如:我的docker-compose版本是2.0.1,但文档中最新版本是1.29.2。所以,我必须降级到最新版本(哈哈)。


发生了这样的事情,而不是降级版本2,有这个命令:docker-compose-v1 - elad silver

1
如果您在使用VSCode的DevContainer时遇到此错误,请删除您的.devcontainer文件夹并自动生成一个新的文件夹。

0

对我有效的方法是清理并重新构建项目。


0

不确定为什么你会遇到这样的问题,但我曾经遇到过类似的问题,我是通过以下方式解决的。

进入你的$user目录 找到 .docker 文件夹 在 .docker 文件夹中找到 config.json

然后删除 credHelpers 部分。

"credHelpers":{"gcr.io":"gcloud","us.gcr.io":"gcloud","eu.gcr.io":"gcloud","asia.gcr.io":"gcloud","staging-k8s.gcr.io":"gcloud","marketplace.gcr.io":"gcloud"},

然后重启Docker,希望它可以解决您的问题。


-1

看起来你做了一些更改,但没有重新构建镜像。

所以,是的,清除所有内容,但也要: - 清除 docker-compose - 重新构建 docker-compose


4
可以给更多信息吗?如何运行清理 Docker Compose? - Enrico

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