无法在Docker-Compose

时间:2020-09-01 15:31:25

标签: docker docker-compose port

我目前有一个带有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内部的使用,对吗?

1 个答案:

答案 0 :(得分:1)

将Docker Compose网络(即oracleapp)中的服务视为不同的主机。每个服务都可以通过其服务名称来寻址,即oracle应该以该名称(oracle来引用http1服务。

端口映射允许您将Docker Compose网络中的服务端口公开(并映射)到(可能不同)主机端口。这通常是因为主机的端口空间为奇数维(0 ... 65535),而Docker Compose网络中的每个服务具有端口空间。 2个服务(例如http28080)可能各自使用端口,例如8080,但主机上只有一个8080,因此,要在您的主机上公开这些服务中的每一项,都必须让步;一个可能也位于主机的8081上,但另一个可能需要位于其他位置,也许是oracle

在您的情况下,例如8080在Docker Compose网络内的10000上运行,并暴露在主机的端口app上。就oracle:8080服务而言,该服务在Docker Compose网络中以808010000而非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
相关问题