Docker 困境:当容器拒绝监听,数据库难以获取时
阅读:10
点赞:0
Docker是一个独特的工具,它为开发和生产环境提供了一致的环境,这一点无疑是独一无二的。尽管Docker带来了很多好处,但设置它有时可能会有点棘手,无论是对于单个容器还是容器网络。
在本文中,我们将探讨以下问题:
-
为什么你无法停止/杀死你的容器以及为什么会这样? -
即使使用正确的用户名和密码,为什么在数据库容器上会出现访问被拒绝的问题?
为什么我无法停止/杀死我的Docker容器,为什么会这样?
当你尝试停止Docker容器时,可能会变得非常沮丧,因为容器并没有停止。你可能会开始质疑你的生活选择,最终打开另一个终端尝试使用命令来杀死它,但是却收到“Permission denied”错误,即使你使用命令。docker kill
sudo
与其每次都重启系统或尝试重置Docker服务,你可以使用以下方法来解决问题。首先,使用命令找到所有正在运行的服务,然后选择进程编号并使用命令来终止进程。pgrep docker
kill -9 <process number>
为什么会出现这个问题?
这个问题通常是因为在Docker容器内运行的进程有一个策略或操作符。例如,考虑以下进程:.restart
uvicorn main:app --reload
如果你在Docker容器内运行这个应用程序,并让它默认在容器启动时启动,你将无法杀死它,因为选项会不断重启应用程序,即使发送了信号。--reload
SIGINT
数据库容器上访问被拒绝的问题,即使使用正确的用户名和密码
这个问题可能令人困惑。你可能会想,“我是不是漏了一个逗号,或者也许有一个多余的空格?”也许你怀疑密码中有一个“埃及分号”。但不,我确定——我是复制粘贴的凭据,所以即使是埃及分号也应该有效。
这个问题发生在一个文件中。奇怪的是,这个镜像在单个 Docker容器上运行得很好,但与文件一起使用时却失败了。我开始删除我在单独运行容器时没有使用的额外参数,最终归结为一个罪魁祸首:文件中的参数。.docker-compose.yml
MYSQL_HOST
指定这个参数会导致一系列问题,正如这里的问题所述。
避免使用这个参数是解决问题的更好方法。