我怎样才能 运行 来自 docker 图像的 docker 容器,来自 docker hub in skaffold?

How can I run a docker container from a docker image from docker hub in skaffold?

假设我想 运行 来自 docker hub 的图像的容器,假设 mosquitto 我会执行 docker run -it -p 1883:1883 -p 9001:9001 eclipse-mosquitto.

我尝试从 gcr.io (deployment.yaml) 中提取图像,就像完成 here:

apiVersion: v1
kind: Service
metadata:
  name: mqtt-broker
  labels:
    app: mqtt-broker
spec:
  type: NodePort
  ports:
    - targetPort: 1883
      port: 1883
  selector:
    app: mqtt-broker
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mqtt-broker
  labels:
    app: mqtt-broker
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mqtt-broker
  template:
    metadata:
      labels:
        app: mqtt-broker
    spec:
      containers:
      - name: mqtt-broker
        image: gcr.io/vu-james-celli/eclipse-mosquitto  # https://hub.docker.com/_/eclipse-mosquitto
        ports:
        - containerPort: 1883

skaffold.yaml:

apiVersion: skaffold/v2beta10
kind: Config
build:
  artifacts:
  - <other image builds>
deploy:
  kubectl:
    manifests:
      - mqtt-broker/*
portForward:
  - resourceType: deployment
    resourceName: mqtt-broker
    port: 1883
    localPort: 1883
  <other port forwardings>
...

然而,当我 运行 skaffold --dev --port-forward 我在输出中得到一个错误:

- deployment/mqtt-broker: container mqtt-broker is waiting to start: gcr.io/vu-james-celli/eclipse-mosquitto can't be pulled

当使用 kubectl 到 运行 作为部署的一部分的 mosquitto 容器时,我必须如何配置 skaffold.yaml (schema version v2beta10)?

您可以使用引用 eclipse-mosquitto 的单个容器创建一个 pod,然后确保从您的 skaffold.yaml.

引用该 pod
apiVersion: v1
kind: Pod
metadata:
  name: mqtt
spec:
  containers:
  - name: mqtt
    image: eclipse-mosquitto
    ports:
    - containerPort: 1883
      name: mqtt
    - containerPort: 9001
      name: websockets

您可以将它变成一个部署或带有服务的副本集等。

首先,将镜像从 docker hub 拉到本地机器上:docker pull eclipse-mosquitto

其次,引用mqtt-broker/deployment.yaml中的图片,例如:

apiVersion: v1
kind: Service
metadata:
  name: mqtt-broker
  labels:
    app: mqtt-broker
spec:
  type: NodePort
  ports:
    - targetPort: 1883
      port: 1883
  selector:
    app: mqtt-broker
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mqtt-broker
  labels:
    app: mqtt-broker
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mqtt-broker
  template:
    metadata:
      labels:
        app: mqtt-broker
    spec:
      containers:
      - name: mqtt-broker
        image: eclipse-mosquitto
        ports:
        - containerPort: 1883

第三,引用 deploment.yaml in skaffold.yaml` 例如:

apiVersion: skaffold/v2beta10
kind: Config
build:
  artifacts:
  - <services-under-development>
deploy:
  kubectl:
    manifests:
      - mqtt-broker/deployment.yaml
portForward:
  - resourceType: deployment
    resourceName: mqtt-broker
    port: 1883
    localPort: 1883
  - <port-forwarding-for-services-under-development>