<p>I've used <code>helm create helloworld-chart</code> to create an application using a local docker image I created. i think the issue is that i have the ports all messed up.</p>
<p><strong>DOCKER PIECES</strong><br />
<strong>--------------------------</strong></p>
<p><em><strong>Docker File</strong></em></p>
<pre><code>FROM busybox
ADD index.html /www/index.html
EXPOSE 8008
CMD httpd -p 8008 -h /www; tail -f /dev/null
</code></pre>
<p>(I also have an <code>index.html</code> file in the same directory as my <code>Dockerfile</code>)</p>
<p><em><strong>Create Docker Image (and publish locally)</strong></em></p>
<pre><code>docker build -t hello-world .
</code></pre>
<p>I then ran this with <code>docker run -p 8080:8008 hello-world</code> and verified I <em><strong>am</strong></em> able to reach it from localhost:8080. <em>(I then stopped that docker container)</em></p>
<p>I also verified this image was in docker locally with <code>docker image ls</code> and got the output:</p>
<pre><code>REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
hello-world                            latest              8640a285e98e        20 minutes ago      1.23MB
</code></pre>
<p><strong>HELM PIECES</strong><br />
<strong>--------------------------</strong></p>
<p>Created a helm chart via <code>helm create helloworld-chart</code>.</p>
<p>Edited the files:</p>
<p><em><strong>values.yaml</strong></em></p>
<pre class="lang-yaml prettyprint-override"><code># ...elided because left the same as default...

image:
  repository: hello-world
  tag: latest
  pullPolicy: IfNotPresent

# ...elided because left the same as default...

service:
  name: hello-world
  type: NodePort # Chose this because MiniKube doesn't have LoadBalancer installed
  externalPort: 30007
  internalPort: 8008
  port: 80
</code></pre>
<p><em><strong>service.yaml</strong></em></p>
<pre class="lang-yaml prettyprint-override"><code># ...elided because left the same as default...

spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort:  {{ .Values.service.internalPort }}
      nodePort:  {{ .Values.service.externalPort }}
</code></pre>
<p><em><strong>deployment.yaml</strong></em></p>
<pre class="lang-yaml prettyprint-override"><code># ...elided because left the same as default...

spec:

  # ...elided because left the same as default...

  containers:
    ports:
      - name: http
        containerPort:  {{ .Values.service.internalPort }}
        protocol:  TCP
</code></pre>
<p>I verified this &quot;looked&quot; correct with both <code>helm lint helloworld-chart</code> and <code>helm template ./helloworld-chart</code></p>
<p><strong>HELM AND MINIKUBE COMMANDS</strong><br />
<strong>--------------------------</strong></p>
<pre class="lang-sh prettyprint-override"><code># Packaging my helm
helm package helloworld-chart

# Installing into Kuberneters (Minikube)
helm install helloworld helloworld-chart-0.1.0.tgz

# Getting an external IP
minikube service helloworld-helloworld-chart
</code></pre>
<p>When I do that, it gives me an external ip like <code>http://172.23.13.145:30007</code> and opens in a browser but just says the site cannot be reached. What do i have mismatched?</p>
<p><strong>UPDATE/MORE INFO</strong>
<strong>---------------------------------------</strong></p>
<p>When I check the pod, it's in a <code>CrashLoopBackOff</code> state. However, I see nothing in the logs:</p>
<p><code>kubectl logs -f helloworld-helloworld-chart-6c886d885b-grfbc</code></p>
<p><em><strong>Logs:</strong></em></p>
<pre><code>Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
</code></pre>
<p>I'm not sure why it's exiting.</p>

<p>The issue was that Minikube was actually looking in the public Docker image repo and finding something also called <code>hello-world</code>. It was not finding my docker image since &quot;local&quot; to minikube is <em>not</em> local to the host computer's docker. Minikube has its own docker running internally.</p>
<ol>
<li>You have to add your image to minikube's local repo: <code>minikube cache add hello-world:latest</code>.</li>
<li>You need to change the pull policy: <code>imagePullPolicy: Never</code></li>
</ol>
