如何在我的Ubuntu容器中安装Docker?

8

我在运行ubuntu:18.04的容器内安装了docker,以运行我的nodejs应用程序。我需要在这个容器内安装docker,因为我需要将另一个小型应用程序docker化。

这是我的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

当容器启动后,我会运行 docker exec -it app bash 命令。如果我执行 service docker start 然后运行 ps ax 命令,就会得到如下结果。
  PID TTY      STAT   TIME COMMAND
  115 ?        Z      0:00 [dockerd] <defunct>

我该怎么做才能在容器内使用Docker?或者有没有使用apt-get而不是apk的Docker镜像?因为当我需要使用时,会出现以下错误:

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

这个回答解决了你的问题吗?如何在Docker容器中安装Docker? - Mike Doe
1
最有可能的是你不想这样做。你想要实现什么目标? - user4093955
我想从myapp容器访问运行在127.0.0.1:port上的其他容器。 - mmoussa
1个回答

14

首先最好使用其中一个基本映像,要么是node-image并安装docker,要么是docker-image并安装node,而不是从头开始创建映像。你所需要的一切。

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


其次,出现了错误不能连接到unix:///var/run/docker.sock上的Docker守护程序。 Docker守护程序正在运行吗?,原因是您没有在Dockefile中启动docker进程,而且不建议在容器中运行多个进程,因为如果Docker进程死亡,您将无法知道状态,您必须将一个进程放在后台。

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

和运行

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

这种方法的问题在于我无法从应用程序容器中使用127.0.0.1:端口来curl所需的容器。 - mmoussa
我暴露了所有需要的内容,我需要从myapp容器中进行curl操作。如果我从本地主机上curl 127.0.0.1:5001,它可以正常工作,但如果我从myapp容器中进行curl操作,则会出现错误。 - mmoussa
你尝试过使用 curl localhost:5001 吗?你能展示一下你正在尝试调用的内容吗? - Adiii
所以我需要通过使用它们的IP:端口(例如127.0.0.1:5001)来使用这些容器。问题是我不能直接这样做,我需要在myapp容器内运行这些容器。我尝试使用网络,但每次重新启动代理容器时调用这些代理的IP都会更改... - mmoussa
你的问题和评论不同,这个答案是基于你当前的问题,你可以开一个新的问题,因为这个答案解决了你当前的问题。 - Adiii
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接