容器之间的网络可达性和可见性?

时间:2019-02-28 14:25:09

标签: docker networking

我有两个要泊坞化的python / flask服务。一种服务s1是用户的端点。第二个s2帮助s1。因此,用户呼叫s1s1呼叫s2

如何使s2知道s1的IP?如何通过最小化配置参数的数量来做到这一点(理想情况下,只需更改一个设置)?

到目前为止s1

FROM python:3-alpine
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
EXPOSE ${FLASK_RUN_ON_PORT}
CMD [ "python", "-m", "flask", "run", "--host=0.0.0.0" ]

使用.env:

FLASK_ENV=production
FLASK_APP=s1.py
FLASK_RUN_PORT=5000 

到目前为止s2

FROM python:3-alpine
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
CMD [ "python", "-m", "flask", "run", "--host=0.0.0.0" ]

使用.env:

FLASK_ENV=production
FLASK_APP=s2.py
FLASK_RUN_PORT=5050 

然后docker-compose如下:

version: '3'
services:
  webservice2:
    build: /path/to/s2
    env_file:
      - /path/to/s2/.env
    ports:
      - ${FLASK_RUN_ON_PORT}:${FLASK_RUN_ON_PORT}
    volumes:
    - .:/code
  webservice1:
    build: /path/to/s1
    env_file:
      - /path/to/s1/.env
    ports:
      - ${FLASK_RUN_ON_PORT}:${FLASK_RUN_ON_PORT}
    volumes:
    - .:/code
    depends_on:
      - webservice2

总结一下。问题是:如何使s1清楚s2在端口5050上?

1 个答案:

答案 0 :(得分:4)

您没有做任何特别的事情。

来自docs

  

不需要链接即可使服务进行通信-默认情况下,任何服务都可以使用该服务的名称访问任何其他服务。 (另请参见the Links topic in Networking in Compose。)

除非您要做一些更改默认行为的操作,否则两个容器都将连接到同一网络,并且webservice1可以知道主机webservice2,反之亦然。