首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在docker容器中更改freeradius-server的配置?

如何在docker容器中更改freeradius-server的配置?
EN

Stack Overflow用户
提问于 2021-01-05 10:48:53
回答 1查看 1.2K关注 0票数 0

我正在尝试使用docker构建一个freeradius-server,并拉出一个图像"freeradius/freeradius server“。我第一次使用给定的命令docker run --name my-radius -t -d freeradius/freeradius-server -X构建了一个容器,并成功地启动了调试模式。但我不知道如何退出,所以我使用ctrl+c来阻止容器。然后,我使用下面的命令进入容器程序,希望再次启动调试模式,这样我就可以更改配置或参数。

代码语言:javascript
运行
复制
docker start my-radius
docker exec -it my-radius /bin/bash

我进入了容器并使用了freeradius -X,但失败了。它呈现

代码语言:javascript
运行
复制
Failed binding to auth address 127.0.0.1 port 18120 bound to server inner-tunnel: Address already in use 
/etc/freeradius/sites-enabled/inner-tunnel[33]: Error binding to port for 127.0.0.1 port 18120

我使用谷歌寻找解决方案,但失败了。我猜这意味着radius服务器自动启动,因此使用了地址127.0.0.1和端口18120。但我不知道怎么把它停在集装箱里。

EN

回答 1

Stack Overflow用户

发布于 2021-01-24 07:26:07

容器启动时,官方FreeRADIUS docker镜像将启动FreeRADIUS。这意味着,如果您启动容器,然后在其中执行一个shell,那么FreeRADIUS就已经在运行了。

一旦FreeRADIUS进程停止,容器就会立即退出,这意味着无法以这种方式启动容器,停止FreeRADIUS运行,然后继续使用容器。

在这种情况下,尝试在另一个shell中第二次运行FreeRADIUS将失败,因为端口已经打开,正如您已经发现的那样。

这可以如下所示:

代码语言:javascript
运行
复制
$ docker run --name my-radius -d freeradius/freeradius-server
106cdbc81e8e5c0257f22bebad221ed1b4ba0a14f40ce1e4110ec388380c7e62
$ docker exec -it my-radius /bin/bash
root@106cdbc81e8e:/# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
freerad        1       0  1 23:10 ?        00:00:00 freeradius -f
root          12       0  1 23:10 pts/0    00:00:00 /bin/bash
root          22      12  0 23:10 pts/0    00:00:00 ps -ef
root@106cdbc81e8e:/# exit
exit
$ docker stop my-radius
my-radius
$ docker rm my-radius
my-radius
$ 

为了能够自己运行FreeRADIUS,您可以做两件事。首先,不要在后台启动容器,而是在调试模式下使用FreeRADIUS在前台启动容器。docker入口点允许您将参数直接传递给守护进程。如果您不需要在容器内实际执行任何操作,只需在调试模式下运行FreeRADIUS,那么这是最简单的方法:

代码语言:javascript
运行
复制
$ docker run --name my-radius -it freeradius/freeradius-server -X
FreeRADIUS Version 3.0.21
Copyright (C) 1999-2019 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
...
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 38640
Listening on proxy address :: port 49445
Ready to process requests
^C$ 

(注:按Ctrl-C可退出)。

另一种方法是在后台启动它,但不是运行FreeRADIUS,而是运行其他进程。然后,您可以通过exec进入容器并手动运行FreeRADIUS。这意味着在没有运行FreeRADIUS的情况下,您可以在容器中获得一个完整的外壳。例如:

代码语言:javascript
运行
复制
$ docker run --name my-radius -d freeradius/freeradius-server sleep 999999999999
23b5ddd4825a31a8fb417e1594028c6533267be4ff20a448d3844203b805dbd9
$ docker exec -it my-radius /bin/bash
root@23b5ddd4825a:/# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 23:16 ?        00:00:00 sleep 999999999999
root           7       0  0 23:17 pts/0    00:00:00 /bin/bash
root          17       7  0 23:17 pts/0    00:00:00 ps -ef
root@23b5ddd4825a:/# freeradius -X
FreeRADIUS Version 3.0.21
Copyright (C) 1999-2019 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
...
Listening on proxy address * port 46662
Listening on proxy address :: port 40284
Ready to process requests
^Croot@23b5ddd4825a:/# exit
exit
$ docker container kill my-radius
my-radius
$ docker container rm my-radius
my-radius

这里使用的sleep命令显然会在某个时刻退出,因此请使用一个足够大的数字,使其运行足够长的时间,因为当进程退出时,容器将关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65572559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档