无法ping通Docker centos图像中的普通用户

时间:2015-02-17 02:54:44

标签: centos docker

我的Dockerfile

FROM centos
RUN useradd me
CMD su -c "ping localhost" me

我的测试命令:

$ docker build -t test .
$ docker run --rm -it test
ping: icmp open socket: Operation not permitted

$ docker run --rm -it test /bin/bash    
[root@153c87b53b53 /]# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.126 ms

我的临时解决方案是https://www.centos.org/forums/viewtopic.php?t=39341

chmod 4755 /usr/bin/ping

1 个答案:

答案 0 :(得分:0)

这不是一个临时解决方案"但是允许用户级ping的实际解决方案 - 基本上ping需要根级别访问才能在原始模式下打开套接字。因此,当它尝试执行此操作但未以root身份运行时,则会出现上述错误。

因此,为了使其正常工作,ping必须是setuid root,这是你在chmod 4755 /bin/ping时所做的事情 - 这意味着当你以普通用户身份运行ping时,你将权限提升为root,但ping很聪明,打开套接字后会直接让你回到用户身上。

所以你的Dockerfile看起来像这样:

FROM centos
RUN chmod 4755 /bin/ping
RUN useradd me
CMD su -c "ping localhost" me