我有两个要泊坞化的python / flask服务。一种服务s1
是用户的端点。第二个s2
帮助s1
。因此,用户呼叫s1
,s1
呼叫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上?
答案 0 :(得分:4)
您没有做任何特别的事情。
来自docs:
不需要链接即可使服务进行通信-默认情况下,任何服务都可以使用该服务的名称访问任何其他服务。 (另请参见the Links topic in Networking in Compose。)
除非您要做一些更改默认行为的操作,否则两个容器都将连接到同一网络,并且webservice1
可以知道主机webservice2
,反之亦然。