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

Sté*_* R. 16 docker docker-compose

我想构建自定义 Dockerfile,但我收到以下消息: --> Starting build app 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
Run Code Online (Sandbox Code Playgroud)

有谁知道我在哪里犯了错误?

谢谢 !

pan*_*ohn 8

以下适用于使用 docker-compose 的所有地方。我使用 Visual Studio docker 工具作为参考

快速回答

我会彻底查看我的 docker-compose.override.yml文件,以获取错误描述中已定义服务的引用。然后删除它。该错误提到您有一个在覆盖文件中定义的服务,但不在基础 docker-compose 文件中。

用visual studio重现问题。

我的 docker-compose 遇到了同样的问题。

就像@Jorn.Beyers 提到的那样,如果您在 Visual Studio 中使用 docker 工具,则可以轻松复制这一点。附加一些服务运行您的 docker-compose,然后开始从您的 docker-compose.yml 中删除服务或服务。

默认情况下,Visual Studio 还会填充docker-compose.override.yml。当您附加服务时。 将出现 OP 的描述性错误

我不确定您是否使用 Visual Studio 清理解决方案,您可以摆脱这个问题。它对我不起作用。

我做了什么并解决了问题?

我所做的是找到了 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
Run Code Online (Sandbox Code Playgroud)

看起来和上面的差不多。在我删除这些行之后。我重新启动了 docker-compose,一切都在运行。

笔记

因为我使用 Visual Studio 及其神奇的自动生成工具。我猜这是这个错误最常出现的地方并且可能令人生畏,因为特别是对于初学者来说,错误描述会给你上面的错误,当点击错误时,你会看到一个非常奇怪的文件,而不是问题的根源。

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


So_*_*_oP 8

就我而言,我在docker-compose.override.yml文件中添加了服务,但忘记将其添加到docker-compose.yml file.


Jor*_*ers 7

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

  • “清洁溶液”有什么作用?我想手动执行相同的操作,因为我没有 Visual Studio (6认同)
  • @dcorking,我相信清理 Visual Studio 中的解决方案将运行“docker-compose down”并删除所有现有的容器和图像。 (2认同)

ada*_*101 6

就我而言,我已经重命名了docker-compose.yml文件中的服务,但忘记在docker-compose.override.yml和 中做同样的事情docker-compose.vs.release.yml


pac*_*una -3

尝试运行docker-compose up --remove-orphans以删除可能徘徊的未使用的容器。