如何使用一个dockerfile将Flask API与mongo连接



我试图将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中。这还需要在一个容器中启动两个进程。如果你确实想走这条路,那么你的问题是你有一个多阶段的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(,就可以运行这两个容器。

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-host连接到的mongo主机。

这将使用--link选项,该选项将允许您访问mongo容器的网络,该网络将由其名称(mongo(引用。

最新更新