在docker中运行两个服务节点和python

在docker中运行两个服务节点和python,docker,kubernetes,docker-compose,dockerfile,Docker,Kubernetes,Docker Compose,Dockerfile,我试图在一个容器节点和python中运行两个服务,但只有一个正在运行。我想在kubernetes上的一个容器中运行这两个服务 编辑:1 FROM python:3.5 AS python-build ADD . /test WORKDIR /test RUN pip install -r requirements.txt &&\ pip install oauth2client FROM node:10-alpine AS node-build WORKDIR /te

我试图在一个容器节点和python中运行两个服务,但只有一个正在运行。我想在kubernetes上的一个容器中运行这两个服务

编辑:1

FROM python:3.5 AS python-build
ADD . /test
WORKDIR /test
RUN pip install -r requirements.txt  &&\
    pip install oauth2client

FROM node:10-alpine AS node-build
WORKDIR /test
COPY --from=python-build ./test ./
WORKDIR /test/app/static
RUN npm cache verify && npm install && npm install sass -g &&\
    sass --no-source-map scss/layout/_header.scss:css/layout/_header.css &&\
    sass --no-source-map scss/layout/_footer.scss:css/layout/_footer.css &&\
    sass --no-source-map scss/layout/_side_menu.scss:css/layout/_side_menu.css &&\ 
    sass --no-source-map scss/layout/_error_component.scss:css/layout/_error_component.css &&\ 
    sass --no-source-map scss/components/_input_box.scss:css/components/_input_box.css &&\
    sass --no-source-map scss/components/_button.scss:css/components/_button.css &&\
    sass --no-source-map scss/components/_loading_mask.scss:css/components/_loading_mask.css &&\ 
    sass  --no-source-map scss/components/_template_card.scss:css/components/_template_card.css &&\
    sass --no-source-map scss/pages/_onboarding_app.scss:css/pages/_onboarding_app.css &&\
    sass  --no-source-map scss/pages/_choose.scss:css/pages/_choose.css &&\
    sass --no-source-map scss/pages/_adapt.scss:css/pages/_adapt.css &&\
    sass --no-source-map scss/pages/_express.scss:css/pages/_express.css &&\
    sass --no-source-map scss/pages/_experience.scss:css/pages/_experience.css &&\ 
    sass --no-source-map scss/pages/_features.scss:css/pages/_features.css &&\
    sass --no-source-map scss/pages/_request_demo.scss:css/pages/_request_demo.css &&\ 
    npm run build
WORKDIR /test/node-src
RUN npm install express


FROM python:3.5-slim
COPY --from=python-build /root/.cache /root/.cache
WORKDIR /test
COPY --from=node-build ./test ./
RUN apt-get update -yq \
    && apt-get install curl -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && pip install -r requirements.txt
WORKDIR /test/node-src
EXPOSE 3000
CMD ["node", "server.js"] #RUN NODE SERVICE INSIDE NODE/SRC
WORKDIR /test
EXPOSE 9595
CMD [ "python3", "./run.py" ] #RUN PYTHON SERVICE INSIDE /TEST

我还尝试了节点的pm2服务。

您试图实现的不是推荐的设计。通常,docker容器应该运行单个服务。因此,docker中没有内置的方法来实现这一点,尽管仍然可以使用包装器脚本或类似的工具来管理容器中的多个服务-

或者:(我选择了supervisord选项,因为对我来说,它看起来比包装脚本方式更干净、更易于管理)

使用像supervisord这样的流程管理器。这是一个适度的错误 重量级方法,要求您打包supervisord及其 映像中的配置(或基于包含 以及它管理的不同应用程序。然后 您启动supervisord,它为您管理流程。这是 使用此方法的Dockerfile示例,假定 预先编写的supervisord.conf、我的第一个过程和我的第二个过程 所有文件都与Dockerfile位于同一目录中

FROM python:3.5 AS python-build
ADD . /test
WORKDIR /test
RUN pip install -r requirements.txt  &&\
    pip install oauth2client

FROM node:10-alpine AS node-build
WORKDIR /test
COPY --from=python-build ./test ./
WORKDIR /test/app/static
RUN npm cache verify && npm install && npm install sass -g &&\
    sass --no-source-map scss/layout/_header.scss:css/layout/_header.css &&\
    sass --no-source-map scss/layout/_footer.scss:css/layout/_footer.css &&\
    sass --no-source-map scss/layout/_side_menu.scss:css/layout/_side_menu.css &&\ 
    sass --no-source-map scss/layout/_error_component.scss:css/layout/_error_component.css &&\ 
    sass --no-source-map scss/components/_input_box.scss:css/components/_input_box.css &&\
    sass --no-source-map scss/components/_button.scss:css/components/_button.css &&\
    sass --no-source-map scss/components/_loading_mask.scss:css/components/_loading_mask.css &&\ 
    sass  --no-source-map scss/components/_template_card.scss:css/components/_template_card.css &&\
    sass --no-source-map scss/pages/_onboarding_app.scss:css/pages/_onboarding_app.css &&\
    sass  --no-source-map scss/pages/_choose.scss:css/pages/_choose.css &&\
    sass --no-source-map scss/pages/_adapt.scss:css/pages/_adapt.css &&\
    sass --no-source-map scss/pages/_express.scss:css/pages/_express.css &&\
    sass --no-source-map scss/pages/_experience.scss:css/pages/_experience.css &&\ 
    sass --no-source-map scss/pages/_features.scss:css/pages/_features.css &&\
    sass --no-source-map scss/pages/_request_demo.scss:css/pages/_request_demo.css &&\ 
    npm run build
WORKDIR /test/node-src
RUN npm install express


FROM python:3.5-slim
COPY --from=python-build /root/.cache /root/.cache
WORKDIR /test
COPY --from=node-build ./test ./
RUN apt-get update -yq \
    && apt-get install curl -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && pip install -r requirements.txt
WORKDIR /test/node-src
RUN npm install pm2 -g
EXPOSE 3000
CMD pm2 start server.js #RUN NODE SERVICE INSIDE NODE/SRC
WORKDIR /test
EXPOSE 9595
CMD [ "python3", "./run.py" ] #RUN PYTHON SERVICE INSIDE /TEST


您当前在Dockerfile中使用的内容被称为,远不是您真正想要的。

您好,谢谢您写下答案,从您的答案来看,似乎不可能运行两个服务,但我不能运行我的多阶段构建吗?@HarshManvar我说“这不是不可能的”。对不起,这还不够清楚。现在编辑我的答案。当然你可以和主管一起做。祝你好运嗨,谢谢你的回答,我也得到了解决办法“supervisord”是一个很好的方法,但我只是在CMD pm2 node src/server.js&&python run.py中添加了命令。最后,我只是在docker文件中运行一个CMD命令。CMD pm2节点服务的起始路径&&python到python文件的路径。这应该适用于小型环境(这有点像supervisord实际所做的)。请记住,有时您需要一个工具来管理流程(例如,当容器因任何原因下降时,您希望了解更多的情况,等等)。祝你好运
FROM ubuntu:latest
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY my_first_process my_first_process
COPY my_second_process my_second_process
CMD ["/usr/bin/supervisord"]