当我运行docker compose时,我的golang(入口)容器失败,提示“建立Mongo会话时出错”

I ran a docker-compose up and I get an error on my golang container saying "Error establishing Mongo session" and then the container exits out. I'm not sure if the issue begins with my golang container or mongo.

I've tried a multitude of things at this point. Here is my docker logs file for my golang container.

docker logs for golang

To run in debug mode, run with '-d true' option

time="2019-08-20T20:12:12Z" level=info msg="Logging in INFO mode"
time="2019-08-20T20:12:12Z" level=info msg="Go version go1.7.3"
time="2019-08-20T20:12:12Z" level=info msg="Starting ingest service on port 4001"
time="2019-08-20T20:12:12Z" level=info msg="Koala Version Number: v19.33.0"
time="2019-08-20T20:12:23Z" level=error msg="Error establishing Mongo session"
panic: no reachable servers

goroutine 1 [running]:
panic(0x933c00, 0xc4201b4f70)
        /usr/local/go/src/runtime/panic.go:500 +0x1a1
ingest/mongo.InitDB(0x0, 0x0)
        /home/jsikala/Documents/koala/go/src/ingest/mongo/mongo.go:34 +0x27e
main.setup()
        /home/jsikala/Documents/koala/go/ingest.go:118 +0x3ce
main.main()
        /home/jsikala/Documents/koala/go/ingest.go:56 +0x292

This is the error I get when I run my docker compose up.

This is my docker-compose.yml file.

version: "3"
volumes:
    data:
        external:
            name: ${MONGO_VOLUME_NAME}
services:
    rails:
        image: rails2
        container_name: koala_rails_${USER}
        environment: 
            - KOALA_ENV
            - RAILS_PORT
            - KOALA_INGEST_URL=${INGEST_PROTOCOL}://ingest:${INGEST_PORT}
            - KOALA_MONGO_URL=mongo_service:27017
            - KOALA_REDIS_URL=redis_service:6379
            - KOALA_PKI_IN_DEV
            - KOALA_USER_ID_HEADER
            - USER
            - USERNAME
            - KOALA_REGISTER_USER_URL
            - KOALA_SECURITY_VALIDATOR_URL
            - CERT_FILE_PEM=/usr/src/app/certs/public.pem
            - PRIVATE_CERT_FILE_PEM=/usr/src/app/certs/private-key.pem
            - SSL_CA_FILE=/usr/src/app/certs/ca.pem
            - LOGNAME
            - KOALA_SECRET_KEY_BASE
            - KOALA_MONGO_USERNAME
            - KOALA_MONGO_PASSWORD
            - KOALA_HELP_URL
            - KOALA_CONTACT_EMAIL
            - KOALA_USE_CERTS
            - BUNDLE_GEMFILE
            - KOALA_SERVER_URL
            - RAILS_SERVE_STATIC_FILES
            - RAILS_LOG_TO_STDOUT
        ports:
            - "${RAILS_PORT}:${RAILS_PORT}"
        volumes:
            - ${CERT_FILE_PEM}:/usr/src/app/certs/public.pem
            - ${PRIVATE_CERT_FILE_PEM}:/usr/src/app/certs/private-key.pem
            - ${SSL_CA_FILE}:/usr/src/app/certs/ca.pem
    mongo_service:
        image: mongo:3.2.0
        volumes:
            - data:/data/db
        ports:
            - "27017:27017"
    redis_service:
        image: redis:4.0.8
        ports:
            - "6379:6379"
    ingest:
        image: ingest
        container_name: koala_ingest_${USER}
        extra_hosts:
            - csie.as.northgrum.com:10.8.131.12
        environment: 
            - KOALA_ENV
            - KOALA_CONFIG_FILE=/go/config.yml
            - INGEST_PORT
            - LOGNAME
            - KOALA_MONGO_URL
            - KOALA_JIRA_URL
            - KOALA_JIRA_SESSION_URL
            - CERT_FILE_PEM=/go/certs/public.pem
            - PRIVATE_CERT_FILE_PEM=/go/certs/private-key.pem
            - SSL_CA_FILE=/go/certs/ca.pem
            - KOALA_REDIS_URL=redis_service:6379
            - KOALA_USE_CERTS
            - KOALA_MONGO_USERNAME
            - KOALA_MONGO_PASSWORD
            - JIRA_USERNAME
            - JIRA_PASSWORD
        ports:
            - "${INGEST_PORT}:${INGEST_PORT}"
        volumes:
            - ${CERT_FILE_PEM}:/go/certs/public.pem
            - ${PRIVATE_CERT_FILE_PEM}:/go/certs/private-key.pem
            - ${SSL_CA_FILE}:/go/certs/ca.pem
        links:
            - mongo_service
        depends_on:
            - mongo_service
            - redis_service

NOTE: ingest is the golang service

This is my docker Dockerfile for golang

FROM golang:1.11.5

COPY . .

WORKDIR /go
COPY config.yml /go
RUN mkdir -p $WORKDIR/logs
RUN mkdir -p $WORKDIR/certs

RUN cd $WORKDIR

ENV PATH $PATH:$WORKDIR

CMD ["./runIngest"]

If this ran as intended, golang would be ingesting data in mongo. Any idea what caused this issue?

In order to connect from Golang container to Mongo container, the Mongo Host must be set to mongo_service_name:mongo_port. And make sure the Golang container can reach to the Mongo container (by using network or links directives).

Please check your KOALA_MONGO_URL in the ingest service.

I don't know exactly what is your Mongo client in your ingest service. But normally, KOALA_MONGO_URL may be mongo_service:27017 or mongodb://mongo_service:27017/database_name.