Программа golang работает нормально вне докера, но завершается с 0, когда докеризуется - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующий файл docker-compose.yml:

version: "3.3"

services:
  api:
    build: ./api
    expose:
      - '8080'
    container_name: 'api'
    ports:
      - "8080:8080"
    depends_on:
      - db
    stdin_open: true
    tty: true    
    networks:
      - api-net

  db:
    build: ./db
    expose:
      - '27017'
    container_name: 'mongo'
    ports:
      - "27017:27017"
    networks:
      - api-net

networks:
  api-net:
    driver: bridge

и Dockerfile для контейнера API выглядит следующим образом:

FROM iron/go:dev
RUN mkdir /app
COPY src/main/main.go /app/
ENV SRC_DIR=/app
ADD . $SRC_DIR
RUN go get goji.io
RUN go get gopkg.in/mgo.v2
# RUN cd $SRC_DIR; go build -o main
CMD ["go", "run", "/app/main.go"]

Если я запускаю код для main.go вне контейнера, он запускается, как и ожидалось, однако, если я пытаюсь запустить контейнер как часть docker-compose, я получаю выход 0. Я видел другие потоки в stackoverflow, которые имеют предложил использовать stdin_open и tty, но это не помогло. Я также попытался создать файл .env в том же каталоге, из которого я выпускаю docker-compose, с COMPOSE_HTTP_TIMEOUT=8000, но это тоже не сработало. Я ищу помощь и предложения относительно того, что мне нужно сделать, чтобы мой контейнер API продолжал работать.

Я знаю, что --verbose может быть выдано с помощью docker-compose, однако я не уверен, что мне следует искать в выводе, который это производит.

1 Ответ

0 голосов
/ 09 мая 2018

Мне наконец удалось докопаться до сути, в моем коде, который работал вне контейнера, который у меня был:

http.ListenAndServe("localhost:8080", mux)

Исправлено было просто удалить localhost, так что теперь у меня есть:

http.ListenAndServe(":8080", mux)
...