我想构建自定义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
有人知道我在哪里犯错了吗?
谢谢!
答案 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.yml
和 docker-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。 希望它能解决您的问题。