Docker。地图端口不会在后台启动运行。

问题描述 投票:1回答:1

我有一个以端口为起点的python docker容器。8000. 这个过程,在用户交互之后,在同一个容器中,启动了 h20 后台的java进程在端口中 54321.

两个端口都暴露在Docker文件中。

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
RUN apt update && apt install -y default-jre
EXPOSE 8000
EXPOSE 54321
COPY . /code/

两个端口都被映射到 docker-compose.yml:

  backend:
    image: xxxxx/xxx-backend
    build: backend/xxx/.
    ports:
      - "8000:8000"
      - "54321:54321"
    environment:
      - "KEY: value"
    command: python manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
    networks:
      - xxx

问题是:

当容器运行时,8000端口是被映射的,但当我启动这个容器时 服务器(是python h2o.init()),服务器启动了,而且运行起来了(从容器里面的lynx可以访问到localhost:54321),但是映射没有用。看来 54321 端口根本没有被映射,因为它不在 CMD 或启动进程中。

有什么办法可以在容器启动时,即使进程没有启动,也能映射端口?

更新

这是我的 docker-compose ps:

     Name                   Command                State                          Ports                      
-------------------------------------------------------------------------------------------------------------
some_container_1   python manage.py runserver ...   Up         0.0.0.0:54321->54321/tcp, 0.0.0.0:8000->8000/tcp
docker docker-compose h2o
1个回答
0
投票

你可以尝试的一件事是通过使用绕过容器化进行网络化来作弊。

network_mode: "host"

这里有一篇不同的stackoverflow文章 有关于这方面的讨论。

以及compose文档的链接。

所以,试试这个。

backend:
    image: xxxxx/xxx-backend
    build: backend/xxx/.
    network_mode: "host"
    environment:
      - "KEY: value"
    command: python manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
    networks:
      - xxx
© www.soinside.com 2019 - 2024. All rights reserved.