我目前有一个带有3个不同数据库的应用程序(用于测试)。我有以下docker映像:
Dockerfile
FROM golang:1.15
WORKDIR /myapp
# Download wait for it tool.
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /wait-for-it
RUN chmod +x /wait-for-it
和以下docker-compose.yml
version: '3.7'
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- .:/app
command: sh -c "/wait-for-it postgres:10001 -- /wait-for-it oracle:10000 -- /wait-for-it mongodb:10002"
depends_on:
- oracle
- mongodb
- postgres
ports:
- "8080:8080"
oracle:
image: chameleon82/oracle-xe-10g:latest
ports:
- "10000:8080"
expose:
- 10000
postgres:
image: postgres:9.6-alpine
ports:
- "10001:5432"
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
- POSTGRES_DB=testdb
expose:
- 10001
mongodb:
image: mongo:latest
ports:
- "10002:27017"
expose:
- 10002
正如您所见,事情是,我的应用程序在8080上侦听,但是Oracle侦听。我知道我可以更改我的应用程序端口,但是我仍然想将Oracle切换到另一个端口。我正在尝试通过端口映射来实现它,但是我确实认为它仅适用于主机,不适用于docker-compose内部的使用,对吗?
答案 0 :(得分:1)
将Docker Compose网络(即oracle
,app
)中的服务视为不同的主机。每个服务都可以通过其服务名称来寻址,即oracle
应该以该名称(oracle
来引用http1
服务。
端口映射允许您将Docker Compose网络中的服务端口公开(并映射)到(可能不同)主机端口。这通常是因为主机的端口空间为奇数维(0 ... 65535),而Docker Compose网络中的每个服务具有端口空间。 2个服务(例如http2
和8080
)可能各自使用端口,例如8080
,但主机上只有一个8080
,因此,要在您的主机上公开这些服务中的每一项,都必须让步;一个可能也位于主机的8081
上,但另一个可能需要位于其他位置,也许是oracle
。
在您的情况下,例如8080
在Docker Compose网络内的10000
上运行,并暴露在主机的端口app
上。就oracle:8080
服务而言,该服务在Docker Compose网络中以8080
(10000
而非expose
)的形式提供。
postgres
语法纯粹是记录性的,没有任何功能作用。
如果我按原样运行您的Compose脚本,它将无法正常工作。这是预料之中的,因为5432
在Compose网络中的10001
上可用,而不是docker-compose logs app
Attaching to 63690852_app_1
app_1 | wait-for-it: waiting 15 seconds for postgres:10001
app_1 | wait-for-it: timeout occurred after waiting 15 seconds for postgres:10001
app_1 | wait-for-it: waiting 15 seconds for oracle:10000
app_1 | wait-for-it: timeout occurred after waiting 15 seconds for oracle:10000
app_1 | wait-for-it: waiting 15 seconds for mongodb:10002
app_1 | wait-for-it: timeout occurred after waiting 15 seconds for mongodb:10002
command: sh -c "/wait-for-it postgres:5432 -- /wait-for-it oracle:8080 -- /wait-for-it mongodb:27017"
如果我纠正端口:
docker-compose logs app
Attaching to 63690852_app_1
app_1 | wait-for-it: waiting 15 seconds for postgres:5432
app_1 | wait-for-it: postgres:5432 is available after 0 seconds
app_1 | wait-for-it: waiting 15 seconds for oracle:8080
app_1 | wait-for-it: oracle:8080 is available after 8 seconds
app_1 | wait-for-it: waiting 15 seconds for mongodb:27017
app_1 | wait-for-it: mongodb:27017 is available after 0 seconds
它按预期工作:
list_of_responses =['Respiratory','GI_System','Systemic_Other','EXP_TEST_COVMEN_PUI_MISC','MED_ALERT_CPR_SHOCK_SEPSIS','Lymph_Node_Neck','Ear','Mouth_Sores','Eye','Cough','Nasal_Congestion','SOB_WOB_Hyp_Desat','PNA','Abdominal_Pain','Nausea','Vomiting','Diarrhea','Rash','Fever','Weak_Fatigue','Bodyaches','Dizziness','Fussy','Poor_PO_Dehydration','Tachycardia','COVID_Exposure','COVID_Test','COVID_PUI','CP','ST','HA','Wheezing_Asthma','Loss_Taste_Smell']
for cc in list_of_responses:
reg_model = smf.logit("Covid_pos ~ cc + C(RACE_GROUP_N, Treatment(0)) + C(Age_Group_N, Treatment(0)) + C(Insurance_Type_Group, Treatment(0))",
data = df_merged2).fit()
reg_model_odds = pd.DataFrame(np.exp(reg_model.params), columns= ['OR'])
reg_model_odds['z-value']= reg_model.pvalues
reg_model_odds[['2.5%', '97.5%']] = np.exp(reg_model.conf_int())
reg_model_odds['OR'] = round(reg_model_odds['OR'], 2)
reg_model_odds['2.5%'] = round(reg_model_odds['2.5%'], 2)
reg_model_odds['97.5%'] = round(reg_model_odds['97.5%'], 2)
reg_model_odds["OR 95% CI"]= reg_model_odds['OR'].map(str)+' ('+reg_model_odds['2.5%'].map(str)+', '+reg_model_odds['97.5%'].map(str)+')'
reg_model_oddsOR=reg_model_odds["OR 95% CI"]
reg_model_oddsOR