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

时间:2018-09-11 20:44:32

标签: 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

有人知道我在哪里犯错了吗?

谢谢!

7 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

快速解答:

我将彻底清除我的 docker-compose.override.yml 文件,以获取错误描述中所定义服务的引用。

使用Visual Studio重现问题。

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

就像@ Jorn.Beyers提到的那样,如果您使用Visual Studio的docker-tools可以很容易地复制它。附加一些服务,运行您的docker-compose,然后开始从docker-compose中删除服务或服务。

默认情况下,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

与上述相似。在我删除这些行之后。 我重新启动了docker-compose,一切都运行了。

注意

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

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

答案 2 :(得分:2)

就我而言,我在 docker-compose.yml 文件中重命名了服务,但忘记在 docker-compose.override.ymldocker-compose.vs.release.yml 中重命名。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我在文档中找不到任何提示,但可能是服务名称中的-

答案 5 :(得分:0)

似乎您做了一些更改并且没有重建图像。

是的,清理所有东西, -清洁docker-compose -重建docker-compose

答案 6 :(得分: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。 希望它能解决您的问题。