Search code examples
dockerubuntucontainers

How to install Docker inside my ubuntu container?


I installed docker inside a container running on ubuntu:18.04 to run my nodejs app, I need docker installed inside this container because i need to dockerize an other small app

Her is my Dockerfile

FROM ubuntu:18.04

WORKDIR /app

COPY package*.json ./

# Install Nodejs
RUN apt-get update
RUN apt-get -y install curl wget dirmngr apt-transport-https lsb-release ca-certificates software-properties-common gnupg-agent
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get -y install nodejs

# Install Chromium
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update
RUN apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst \
      --no-install-recommends
RUN rm -rf /var/lib/apt/lists/*

# Install Docker
RUN curl -fsSL https:/download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
RUN apt-get update -y
RUN apt-get install -y docker-ce docker-ce-cli containerd.io

RUN npm install

COPY . .

CMD [ "npm", "start" ]

EXPOSE 3000

When the container is up, i docker exec -it app bash. If i do a service docker start then ps ax, got this

  PID TTY      STAT   TIME COMMAND
  115 ?        Z      0:00 [dockerd] <defunct>

What can i do to be able to use docker inside the container or is there a docker image not using apk but apt-get ? Because when i need to use it, i got this error :

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Solution

  • First thing better to use one of the base images, either for node-image and install docker and for docker-image and installed node, instead of creating image from scratch. All you need

    FROM  node:buster
    RUN apt-get update 
    RUN apt install docker.io -y
    RUN docker --version
    ENTRYPOINT nohup dockerd >/dev/null 2>&1 & sleep 10 && node /app/app.js
    
    
    

    second thing, The error Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?, The reason is you are not starting the docker process in the Dockefile, and also running multiple processes in the container is not recommended, as if Docker process dies you will not know the status, you have to put one process in the background.

    CMD nohup dockerd >/dev/null 2>&1 & sleep 10 && node /app/app.js
    

    and run

    docker run --privileged  -it -p 8000:8000  -v /var/run/docker.sock:/var/run/docker.sock your_image