我正在尝试将Flask制造的API的图像与mongo的图像合并到单个最终图像中,例如以下dockerfile:
FROM mongo:latest
EXPOSE 27017
FROM python:3.8-alpine
ADD requirements.txt .
ENV VIRTUAL_ENV=/opt/venv
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000
ADD api /api
ADD scripts /api/scripts
WORKDIR /api
CMD python api.py &> api.log
但这不起作用...如果我首先将API命令放入dockerfile中,则仅创建API映像。如果我先将mongo的命令放在首位,则仅创建mongo的映像。我正在使用以下命令在docker中创建映像:
docker build --tag api .
我正在使用以下命令创建容器:
docker run -p 5000:5000 -p 27017:27017 --name api -d api
我究竟做错了什么?
谢谢,
我不会推荐这个
我个人从未见过将应用程序和数据库包含在单个Dockerfile中。这还需要您在一个容器中启动2个进程。如果您确实想走这条路,那么这里的问题是您有一个多阶段的Dockerfile,但是从第一阶段起就没有包含任何内容,因此,实际上您只有python代码。
同样,如果您确实想走这条路(我强烈建议您不要这样做),则可以这样调用您的第一阶段:
FROM mongo:latest AS mongo_builder
然后从该阶段开始复制
FROM mongo:latest AS mongo_builder
FROM python:3.8-alpine
COPY --from mongo_builder /usr/bin/mongo* /usr/bin/
...
然后,您可以算出如何在容器中运行2个进程(这是不平凡的)。
但是,我不建议您这样做。
我会怎么做
我要做的是完全废弃多阶段构建并运行2个单独的容器。
一旦确定了如何在容器中运行python应用程序(myapp
现在将其称为),即可运行2个容器。
docker run -d --name mongo mongo:latest # (You'll want to figure out how to persist data)
docker run -d --name myapp --link mongo -p 50000:50000 myapp:latest --mongo-host mongo:27017
^这是假设您有一种方法可以指定要连接的mongo主机--mongo-host
。
这将使用--link
允许您访问mongo
容器网络的选项,该网络将以其名称(mongo
)进行引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句