Docker 困境:当容器拒绝监听,数据库难以获取时

发布:2024-11-12 16:12 阅读:10 点赞:0

Docker是一个独特的工具,它为开发和生产环境提供了一致的环境,这一点无疑是独一无二的。尽管Docker带来了很多好处,但设置它有时可能会有点棘手,无论是对于单个容器还是容器网络。

在本文中,我们将探讨以下问题:

  1. 为什么你无法停止/杀死你的容器以及为什么会这样?
  2. 即使使用正确的用户名和密码,为什么在数据库容器上会出现访问被拒绝的问题?

为什么我无法停止/杀死我的Docker容器,为什么会这样?

当你尝试停止Docker容器时,可能会变得非常沮丧,因为容器并没有停止。你可能会开始质疑你的生活选择,最终打开另一个终端尝试使用命令来杀死它,但是却收到“Permission denied”错误,即使你使用命令。docker killsudo

与其每次都重启系统或尝试重置Docker服务,你可以使用以下方法来解决问题。首先,使用命令找到所有正在运行的服务,然后选择进程编号并使用命令来终止进程。pgrep dockerkill -9 <process number>

为什么会出现这个问题?

这个问题通常是因为在Docker容器内运行的进程有一个策略或操作符。例如,考虑以下进程:.restart

uvicorn main:app --reload

如果你在Docker容器内运行这个应用程序,并让它默认在容器启动时启动,你将无法杀死它,因为选项会不断重启应用程序,即使发送了信号。--reloadSIGINT

数据库容器上访问被拒绝的问题,即使使用正确的用户名和密码

这个问题可能令人困惑。你可能会想,“我是不是漏了一个逗号,或者也许有一个多余的空格?”也许你怀疑密码中有一个“埃及分号”。但不,我确定——我是复制粘贴的凭据,所以即使是埃及分号也应该有效。

这个问题发生在一个文件中。奇怪的是,这个镜像在单个 Docker容器上运行得很好,但与文件一起使用时却失败了。我开始删除我在单独运行容器时没有使用的额外参数,最终归结为一个罪魁祸首:文件中的参数。.docker-compose.ymlMYSQL_HOST

指定这个参数会导致一系列问题,正如这里的问题所述。

避免使用这个参数是解决问题的更好方法。