今天在使用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 # 网络名称

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

被折叠的 条评论
为什么被折叠?



