docker-compose -f docker-compose.yaml up -d运行后容器创建成功但无法启动STATUS: Exited (0)

在使用docker-compose创建Go容器时遇到容器创建成功但无法启动的问题,原因是配置文件缺少关键设置。原本Docker镜像默认命令为bash,不加`-it`会导致容器立即退出。解决方法是在docker-compose.yml中添加`stdin_open: true`和`tty: true`,分别对应于docker run命令的`-i`和`-t`选项,以保持容器运行。

今天在使用docker-compose创建新的go容器时,容器创建成功,但是却启动不了
先说一下问题,

#无法启动的配置文件
version: "3.0"
services:
  go: # go 容器服务,不同于容器名
    image: golang # go 镜像
    container_name: go # go 容器名称
    networks: # 指定加入网络
      - default
    expose:
      - 9090 # 暴露容器端口
networks:  # 下面注意缩进
   default:   # 网络服务名称
     external:   # 外部网络
       name: devnet  # 网络名称

在这里插入图片描述

但是直接用命令创建窗口是没有问题的

docker run -d -it --name go golang /bin/bash

找了半天才发现是我的配置文件少写了配置
原来:
Docker镜像的缺省命令是bash,如果不加 -it,bash命令执行了自动会退出,加-it后docker命令会为容器分配一个伪终端,并接管其stdin/stdout支持交互操作,这时候bash命令不会自动退出
像不使用docker-compose,我们会执行类似如下的命令
docker run -d -it --name go golang /bin/bash
但docker-compose需要额外配置下
需要在docker-compose.yml中包含以下行:
stdin_open: true
tty: true
第一个对应于docker run中的 -i ,第二个对应于 -t .
完整的文件格式如下:

#可以启动,亲验
version: "3.0"
services:
  go: # go 容器服务,不同于容器名
    image: golang # go 镜像
    container_name: go23 # go 容器名称
    networks: # 指定加入网络
      - default
    expose:
      - 9090 # 暴露容器端口,这里只需要让nginx能访问就可以,故无需映射主机端口
    stdin_open: true
    tty: true
networks:  # 下面注意缩进
   default:   # 网络服务名称
     external:   # 外部网络
       name: devnet  # 网络名称

在这里插入图片描述
这样就可以完美启动了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值