golang程序在docker之外运行良好,但在dockerized时退出0

时间:2018-05-05 15:58:46

标签: docker go docker-compose

我有以下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

和api容器的Dockerfile如下:

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文件,我在其中发出了一个与COMPOSE_HTTP_TIMEOUT=8000组成的docker-compose,但这也没有用。我正在寻找帮助和建议我需要做些什么才能使我的api容器保持稳定。

我知道--verbose可以使用docker-compose发布,但是我不确定我应该在它产生的输出中寻找什么。

1 个答案:

答案 0 :(得分:0)

我终于设法在我的代码中找到了底部,在我的容器之外工作:

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

解决方法是简单地删除localhost,以便我现在拥有:

http.ListenAndServe(":8080", mux)