I'm attempting to bundle my app (code, Dockerfiles and a docker-compose script) together inside a single image for easy deployment (entrypoint will just docker-compose up
). My Dockerfile for this top level app image looks like so
FROM alpine:latest
COPY . /app
RUN apk update && apk add --no-cache docker py-pip openrc && pip install docker-compose
When I run this image, it seems that dockerd hasn't started, being absent from top
results; docker ps
reports "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? ". If however I do service docker start
, this returns " * WARNING: docker is already starting". Is there anything special I need to do to get Docker working side of an Alpine container?
If you can't or don't want to inherit from docker:dind
as mentioned in grapes answer there is an option to use alpine
as a base image and install Docker CLI and Docker Compose.
To keep image small some dependencies can be deleted after Docker Compose installation:
FROM alpine:3.11
RUN apk update && \
apk add --no-cache docker-cli python3 && \
apk add --no-cache --virtual .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make && \
pip3 install docker-compose && \
apk del .docker-compose-deps
This image doesn't contain Docker Engine and Docker-in-Dcoker approach has to be used by mounting /var/run/docker.sock
from the host
docker run -v /var/run/docker.sock:/var/run/docker.sock <image name>
Docker consists of docker daemon, who runs all services, and CLI, used to interact with daemon (ok, there are lots of other parts, but these are most important). Installing docker-compose
does not install daemon, regardless of what message you are getting from service
command.
To use docker
inside container, you have to use docker-in-docker
image. It is called docker:dind
. Inherit from it (instead of alpine
) and enjoy.
But before read this article , which explains why it is not a great idea and what are other ways to use docker inside container (tip: you can call host's docker daemon from inside container with just mounting /var/run/docker.sock:/var/run/docker.sock
socket).
You can run this to get docker-compose
apk update && apk add --no-cache --virtual docker-cli python3 .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make python3 py3-pip py-pip curl libffi-dev openssl-dev gcc libc-dev rust cargo make
pip install docker-compose
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.