Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang程序在docker外部正常运行,但在停靠时以0退出_Docker_Go_Docker Compose - Fatal编程技术网

golang程序在docker外部正常运行,但在停靠时以0退出

golang程序在docker外部正常运行,但在停靠时以0退出,docker,go,docker-compose,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: - ap

我有以下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,但这些都没有帮助。我还尝试在我发布docker compose的同一目录中创建一个.env文件,其中包含
compose\u HTTP\u TIMEOUT=8000
,但这也不起作用。我正在寻找帮助和建议,我需要做什么,以使我的api容器保持正常


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

我终于找到了问题的根源,在我的代码中,它在我拥有的容器之外工作:

http.ListenAndServe("localhost:8080", mux)
修复方法是简单地删除localhost,因此我现在有:

http.ListenAndServe(":8080", mux)

我终于找到了问题的症结所在,在我的代码中,它在我拥有的容器之外工作:

http.ListenAndServe("localhost:8080", mux)
修复方法是简单地删除localhost,因此我现在有:

http.ListenAndServe(":8080", mux)

也可以将
--verbose
日志的输出粘贴到此处。1。运行命令“docker ps-a”获取所有容器的列表2。从该列表中获取已退出容器3的容器id。运行命令“docker logs-f{container id from step 2}检查是否从logsIt获得任何有用的故障排除信息最好在别处构建Go二进制文件(如有CI/CD)然后将其复制到您的容器中,而不是尝试在Dockerfile中构建它。愚蠢的问题,但是为什么您使用golang的iron/go版本映像而不是官方的repo任何日志?退出代码0来自main。去检查代码,可能是容器外的不同配置。顺便说一句,使用多阶段构建来改进过程sMaybe将
--verbose
日志的输出也粘贴到此处。1.运行命令“docker ps-a”以获取所有容器的列表2.从此列表获取已退出容器的容器id 3.运行命令“docker logs-f{步骤2中的容器id}检查是否从日志中获得任何有用的疑难解答信息。最好在其他地方构建Go二进制文件(如CI/CD,如果有的话),然后将其复制到您的容器中,而不是尝试在Dockerfile中构建。愚蠢的问题,但为什么您使用golang的iron/Go版本映像而不是官方的repo任何日志?退出代码0来自main.go检查代码,可能是容器外的其他配置。顺便说一句,使用多阶段构建来改进流程