我的编程空间,编程开发者的网络收藏夹
学习永远不晚

容器运行完后退出

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

容器运行完后退出

在Web开发中,容器是一种常见的技术,如Docker、Kubernetes等。它们能够提供环境隔离和资源管理的功能,使应用程序能够在不同的环境中运行。然而,有时候我们希望容器运行完毕后能够自动退出,而不是一直保持运行状态。那么,如何实现容器运行完毕后自动退出呢?本文将为大家介绍一些实现方法和技巧。

问题内容

我的 golang fiber 服务器在 google cloud run 上运行时会自动退出并显示以下消息:

container called exit(0).

我使用以下 dockerfile 运行它

# use the offical golang image to create a binary.
from golang:buster as builder

# create and change to the app directory.
workdir /app

# retrieve application dependencies.
copy go.mod ./
copy go.sum ./
run go mod download

copy . ./
run go build

# use the official debian slim image for a lean production container.
# https://hub.docker.com/_/debian
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage- builds
from debian:buster-slim
run set -x && apt-get update && debian_frontend=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# copy the binary to the production image from the builder stage.
copy --from=builder /app/redirect-middleware.git /app/
copy --from=builder /app/pkg /app/pkg/

expose 8080

# run the web service on container startup.
cmd ["/app/redirect-middleware.git", "dev"]

和我的 main.go(仅 func main())

func main() {
    // Load env config
    c, err := config.LoadConfig()
    if err != nil {
        log.Fatalln("Failed at config", err)
    }

    // init DB
    db.InitDb()

    // init fiber API
    app := fiber.New()
    log.Print("Started new Fiber app...")

    // initial route sending version of API
    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString(fmt.Sprintf("Redirection middleware - v%s", viper.Get("Version").(string)))
    })
    log.Print("Default root route set...")

    // api routes
    api := app.Group("/api") // /api
    v1 := api.Group("/v1") // /api/v1
    log.Print("api/v1 group set...")

    // register routes v1
    mastermenus.RegisterRoutes(v1)
    log.Print("Route registered...")

    app.Listen(c.Port)
    log.Print("Api started listening in port 8080")
}

最后一行在 google cloud run 日志中执行正常,我可以看到 api 开始侦听端口 8080

为什么我的容器单独退出?它应该启动 fiber api。

解决方法

我发现了这个问题。在我的 stage.env 文件中,我将端口设置为 :8080。 在本地,传递 app.listen(c.port) 可以按预期很好地转换为 app.listen(":8080") 。当在 cloud run 中使用它时,它会转换为 app.listen("8080"),这当然不起作用,因为它认为这是主机而不是端口。

我添加了 app.listen(":" + c.port) ,它可以工作。

如果您遇到这种情况,请捕获错误:

errApp := app.Listen(":" + c.Port)
if errApp != nil {
    log.Printf("An error happened while running the api: %s", errApp)
} else {
    log.Printf("Api started listening in port %s", c.Port)
}

并采取相应行动。

以上就是容器运行完后退出的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

容器运行完后退出

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

容器运行完后退出

在Web开发中,容器是一种常见的技术,如Docker、Kubernetes等。它们能够提供环境隔离和资源管理的功能,使应用程序能够在不同的环境中运行。然而,有时候我们希望容器运行完毕后能够自动退出,而不是一直保持运行状态。那么,如何实现容器
容器运行完后退出
2024-02-09

如何获取未运行的 Docker 容器的退出代码

php小编小新为您介绍如何获取未运行的Docker容器的退出代码。在使用Docker时,有时我们需要查看容器在退出时的退出代码以便进行故障排查或调试。然而,当容器未运行时,我们无法直接使用`docker logs`命令来获取退出代码。在本文
如何获取未运行的 Docker 容器的退出代码
2024-02-13

c语言怎么让程序运行后不退出

在 c 语言中防止程序退出有以下方法:使用 while(1) 循环无限期运行程序。调用 getchar() 函数等待用户输入暂停程序退出。通过不断调用 sleep() 函数使程序休眠。对于后台运行的守护进程,创建 pid 文件写入程序进程
c语言怎么让程序运行后不退出
2024-05-13

shell脚本运行5秒后自动退出的代码

#!/bin/bash#name show_status.sh#echo $$ > /var/run/show_status.log#sleep 5 && kill `cat /var/run/show_status.log` &#star
2022-06-04

怎么让shell脚本运行5秒后自动退出

这篇文章主要讲解了“怎么让shell脚本运行5秒后自动退出”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么让shell脚本运行5秒后自动退出”吧!代码如下:#!/bin/bash#name
2023-06-09

docker容器启动后马上退出的问题

FROM ubuntu:18.04ENV TZ UTCRUN apt update \ && apt install -y \ libpython2.7 \ python3-etcd \ po
2023-01-31

docker容器退出后数据为什么会丢失

Docker容器的数据丢失主要有以下几个原因:容器是临时性的:Docker容器被设计成短暂的,一旦容器停止或退出,容器内的数据就会丢失。这是因为Docker容器与宿主机是隔离的,容器内的数据并不会持久保存在宿主机上。数据卷未挂载:如果在运行
docker容器退出后数据为什么会丢失
2024-04-03

python写完程序之后如何运行

在Python中运行程序有几种方法:使用Python解释器运行:打开终端(或命令提示符),进入代码所在的目录,然后输入python 文件名.py来运行程序。例如:python my_program.py。使用集成开发环境(IDE)运行:如果
2023-10-22

Android程序退出完美解决方案兼容所有SDK

上网学了好多方法,关于Android的Activity如何退出。好多方法都不行啦,试了各种方法,下面这种方法就是我最喜欢的,简单又容易懂。 使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,
2022-06-06

python写完代码后无法运行如何解决

如果你无法运行Python代码,可能有以下几种原因和解决方法:1. 检查语法错误:Python非常严格,任何一个语法错误都会导致代码无法执行。可以使用Python解释器来检查语法错误并逐行调试错误。2. 确保Python环境已安装:确保你的
2023-09-22

pycharm运行后不出图像如何解决

如果PyCharm运行后没有显示图像,可以尝试以下几种解决方法:1. 检查代码中是否正确使用了绘图函数,并确保没有错误。例如,使用Matplotlib库进行绘图时,需要调用`plt.show()`函数来显示图像。2. 检查PyCharm的设
2023-09-20

如何在Python退出时强制运行一段代码

这篇文章将为大家详细讲解有关如何在Python退出时强制运行一段代码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始
2023-06-03

使用Docker容器运行Mysql

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用Docker容器运行Mysql 前言一、基础的虚拟机环境二、安装过程安装配置docker拉取Mysql镜像用docker启动mysql命令的使用和参数具体解
2023-08-16

c语言运行后不出结果怎么办

如果你的C语言程序在运行后没有输出结果,可以尝试以下几种方法来解决问题:1. 检查代码逻辑:仔细检查程序的逻辑,确保程序没有逻辑错误或者死循环等问题。2. 检查输入输出:确认程序是否正确读取了输入,并且输出语句是否被执行。可以在适当的位置添
2023-09-13

云服务器运行python程序如何输出信息内容和内容

信息内容程序名称:PythonLambdaGenerator在Python中,我们可以使用内置的Lambda函数来创建LambdaGenerator对象。下面是一个简单的例子,展示如何创建一个PythonLambdaGenerator对象,并输出它的名称:```python定义一个LambdaGenerator类cla
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录