我试图按照https://docs.docker.com/docker-for-windows/kubernetes/#use-docker-commands上的说明在Docker for Windows上针对kubernetes运行docker-compose.yml文件。
我使用的是Docker for Windows的Edge版本 - 18.03.0-ce-rc4 - 我启用了kubernetes。
我在https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file上使用示例docker-compose app,即
version: '3.3'
services:
web:
build: .
ports:
- '5000:5000'
redis:
image: redis
这个例子适用于docker-compose build
和docker-compose up
但是按照上面针对docker stack
链接的文档,我得到以下内容:
PS C:\dev\projects\python\kubetest> docker stack deploy --compose-file .\docker-compose.yml mystack
Ignoring unsupported options: build
Stack mystack was created
Waiting for the stack to be stable and running...
- Service redis has one container running
PS C:\dev\projects\python\kubetest> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d
redis ClusterIP None <none> 55555/TCP 8s
请注意,它不会创建Web服务,以及“忽略不受支持的选项:构建”错误
我也尝试在上面链接的文档中使用示例docker-compose.yml文件,但它也没有用,但是有一个完全不同的错误。
简而言之,通过遵循文档,我无法在Docker for Windows上部署到kubernetes。
由于缺乏对build
的支持,因此没有image
来运行web
服务容器。
Compose可以在单个Docker主机上为您管理构建。由于Swarm和Kubernetes通常在多个节点上运行,因此image
应引用网络上可用的注册表,以便所有节点都可以访问同一图像。
Dockers stack deploy
example包括setup a private registry的一个步骤,并将其用作图像的来源:
services:
web:
image: 127.0.0.1:5000/stackdemo
在这种情况下,由于在一个Docker实例下运行的所有内容,可能会手动构建映像并引用该映像名称,这取决于Kubernetes的设置方式。
version: '3.3'
services:
web:
build: .
image: me/web
ports:
- '5000:5000'
redis:
image: redis
在外部构建图像
docker-compose build web
或直接与docker
:
docker build -t me/web .
有一个项目:
称为Docker Kompose,通过自动将现有的docker-compose文件转换为多个yaml文件,帮助已经拥有docker-compose文件的用户尽可能简单地在Kubernetes上部署他们的应用程序。
在遵循官方指示时我遇到了同样的问题。
为了绕过这个问题,我选择使用kubectl
将docker镜像部署到本地k8s而不是使用docker stack
(似乎根本原因可能是--orchestrator kubernetes
标志,它不起作用)。
以下是步骤:
& minikube docker-env | iex
(iex
是Invoke-Expression
的别名)
要么
在bash环境下运行eval $(minikube docker-env)
。
之后,运行docker image ls
,确保您的docker注册表设置为Kubernetes的env。 (您应该在'k8s.gcr.io'域下看到一些默认图像。)
如果打开多个终端,您可能需要在每个终端中执行此操作。docker-compose -f /path/to/your/docker-compose.yml build
您的图像应出现在K8s的本地注册表中。kubectl run hello-world --image=myimage --image-pull-policy=Never