Search code examples
skaffold

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


Let's say I want to run a container from an image from docker hub, let's say mosquitto I'd execute docker run -it -p 1883:1883 -p 9001:9001 eclipse-mosquitto.

I tried to pull the image from gcr.io (deployment.yaml) like done 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>
...

However when I run skaffold --dev --port-forward I get an error in the output:

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

How do I have to configure skaffold.yaml (schema version v2beta10) when using kubectl to run the mosquitto container as part of a deployment?


Solution

  • First, pull the image from docker hub onto the local machine: docker pull eclipse-mosquitto

    Second, refer the image in the mqtt-broker/deployment.yaml e.g.:

    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
    

    Third, reference the deploment.yaml in skaffold.yaml` e.g.:

    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>