如何在不使用Docker Compose的情况下在Docker文件中包含两个图像?

如何在不使用Docker Compose的情况下在Docker文件中包含两个图像?,docker,dockerfile,docker-multi-stage-build,Docker,Dockerfile,Docker Multi Stage Build,如何在dockerfile中有两个链接的图像 我不想使用docker compose,我想要这样的东西 FROM node:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm i COPY . /usr/src/app EXPOSE 4000 CMD [ "npm", "start" ] FROM mongo:latest as mongo WORKDIR

如何在dockerfile中有两个链接的图像

我不想使用docker compose,我想要这样的东西

FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm i
COPY . /usr/src/app
EXPOSE 4000
CMD [ "npm", "start" ]

FROM mongo:latest as mongo 
WORKDIR /data
VOLUME ["/data/db"]
EXPOSE 27017
但我不知道如何加入图片


谢谢

我想简单的解决方案是从mongo image创建您自己的映像并手动安装node

在Dockerfile中可以有多个来自的

FROM可以在单个Dockerfile中多次出现,以创建多个映像,或将一个构建阶段用作另一个构建阶段的依赖项。只需在每条新FROM指令之前记下commit输出的最后一个图像ID。每个FROM指令都会清除以前的指令创建的任何状态

发件人:

  • Compose是一个用于定义和运行多容器Docker应用程序的工具

  • Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令

为node和mongo创建一个映像意味着您将在容器中同时启动和运行这两个映像(资源越多,调试越困难,容器越不稳定,日志越难跟踪,等等)

创建单独的图像,以便可以独立运行任何图像:

$docker run-d-p 4000:4000--名称节点myNode

$docker run-d-p 27017:27017——名称mongo myMongo


我强烈建议您使用compose文件,这将使您能够更好地控制整个环境。

谢谢,但我不想使用docker compose,因为我真的只需要一个图像(myApp),如果使用docker compose,我将有两个图像(node和mongo)。一个容器中可能有多个图像,但当您运行此容器时,是否只有一个图像(例如allMyApp)?谢谢是的,你可以肯定:1。使用node和mongo创建docker文件,然后发布第一篇文章-。有关docker多阶段构建的进一步阅读:2。运行容器并执行任何进一步的自定义。3.使用当前更改创建最终映像(allMyApp):$docker commit your_name/allMyApp:version1现在您有了一个包含所有配置的映像。是的,但是我如何在dockerfile中将mongodb映像与nodejs映像链接?在docker中,用“link”编写它,在dockerfile中?如果你的意思是如何在yml文件中构造图像,那么你的docker文件就可以了。您不需要在图像之间添加任何内容。当您构建docker文件时,它将在一个映像中创建节点mongo和两个公开的端口4000和27017不,我不想要yml文件。当我运行我的容器时,我收到以下错误
未处理PromiserEjectionWarning:MongoneWorkError:在第一次连接时未能连接到服务器[localhost:27017]
,因为我没有将我的nodejs映像与mongodb映像链接,怎么做?我想在我的dockerfile中从(客户端应用程序映像)FROM(后端应用程序映像)FROM(Mongo映像)和后端应用程序映像取决于Mongo。这可能吗?谢谢!您好!您有任何更新吗?