dockerised 应用程序中的子命令以“退出代码 1”退出

dockerised 应用程序中的子命令以“退出代码 1”退出

我有一个应用程序。该应用程序在 Linux 上运行,但我计划将其迁移到 docker 容器。

我开发了一些可以使用嵌入式 PostgreSQL 而不是常规 Postgres 数据库的模块。它在我的主机上运行良好,但在 Docker 中,进程退出并显示代码1

在应用程序中,我想使用以下命令启动一个子进程:

cmd := exec.Command("embeded-postgres")

err := cmd.Run()

错误是:

exit status 1

stderr 或 stdin 中没有其他信息

我认为存在某种机制可以检查容器中是否只有一个进程在运行,但我找不到任何文档。有人能给我指出正确的方向吗?我想阅读并了解更多相关信息。有人能指出

答案1

如果你能发布你的 Dockerfile,这将非常有助于确定原因,我很乐意帮助你进一步调试该问题同时,这里有一些可能对您解决这个问题有帮助的事情。

  1. 你可以有cmd.Run()输出向 stderr 发送实际错误消息
  2. 要调用exec.Command("embeded-postgres"),名为的可执行文件embeded-postgres需要位于 中的目录中$PATH,请尝试使用安装可执行文件的完整路径(对于file,这将是/usr/bin/file)。您可以使用以下方法确定路径which embeded-postgres
  3. 确保embeded-postgres可执行文件存在于容器中。Docker 容器具有单独的文件系统,虽然它与主机共享某些内容(例如内核),但如果您已embeded-postgres在主机上安装它,则容器将无法访问它。想想chroot但要加强版。
  4. 虽然没有任何机制检查容器中是否只有一个进程在运行,但运行多个无关容器中的进程通常被认为是一种反模式。
  5. 我对你的用例没有太多信息,而且我绝对不知道embeded-postgres,但我发现这个 Go 库。这也许是一个更干净的解决方案,而不是安装系统可执行文件并用 调用它os/exec

相关内容