patternkubernetesMajor
Docker In Kubernetes Deployment
Viewed 0 times
dockerkubernetesdeployment
Problem
I am using a third party library that creates sibling docker containers via:
I am trying to create a Kubernetes deployment out of the above container, but currently getting:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
This is expected because I am not declaring
The problem is I don't know how to do this. Is it possible to mount
If not, what is the best approach to run docker sibling-containers from within a Kubernetes deployment/pod?
docker run -d /var/run/docker.sock:/var/run/docker.sock ...I am trying to create a Kubernetes deployment out of the above container, but currently getting:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
This is expected because I am not declaring
/var/run/docker.sock as a volume in the deployment yaml.The problem is I don't know how to do this. Is it possible to mount
/var/run/docker.sock as a volume in a deployment yaml?If not, what is the best approach to run docker sibling-containers from within a Kubernetes deployment/pod?
Solution
Unverified as it sounds brittle to me to start a container outside of k8s supervision, but you should be able to mount
Example variation from the documentation:
I think a simple mount should be enough to allow communication from docker client within the container to docker daemon on host but in case you get a write permission error it means you need to run your container as privileged container
using a securityContext object like such (just an extract from above to show the addition, values taken from the documentation):
/var/run/docker.sock with a hostPath volume.Example variation from the documentation:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock-volume
volumes:
- name: docker-sock-volume
hostPath:
# location on host
path: /var/run/docker.sock
# this field is optional
type: FileI think a simple mount should be enough to allow communication from docker client within the container to docker daemon on host but in case you get a write permission error it means you need to run your container as privileged container
using a securityContext object like such (just an extract from above to show the addition, values taken from the documentation):
spec:
containers:
- image: gcr.io/google_containers/test-webserver
securityContext:
privileged: true
name: test-containerCode Snippets
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock-volume
volumes:
- name: docker-sock-volume
hostPath:
# location on host
path: /var/run/docker.sock
# this field is optional
type: Filespec:
containers:
- image: gcr.io/google_containers/test-webserver
securityContext:
privileged: true
name: test-containerContext
StackExchange DevOps Q#2506, answer score: 22
Revisions (0)
No revisions yet.