在Dockerfile

时间:2016-12-09 15:26:01

标签: docker dockerfile

我的问题如下:我需要启动一个运行dnsmasq服务的容器(但这可能是任何服务)。难点在于我在我的图像中创建了一个用户,所以当我用它创建一个容器时,它从我的自定义用户(没有root)开始。

因此,如何使用非root用户启动需要root权限的服务(sudo service dnsmasq start)?

可能的解决方案:

  • 能够启动已运行服务的容器。从我的理解,这是不可能在Dockerfile中启动服务,因为它不保留状态,只有FS
  • 以root身份启动容器,启动服务,然后切换回用户。这可能有用,但可能存在安全问题
  • 让我的自定义用户有权自行启动服务。怎么做?
  • 不要使用自定义用户(可能是最简单的方法,但是嘿?那里的乐趣在哪里?:))

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:0)

感谢Rickkwa的评论,我能够解决问题:

在Dockerfile中(以root身份):

# Install and configure Dnsmasq
RUN apt-get update && apt-get install -y dnsmasq
# Need to add a new line
RUN echo '' >> /etc/dnsmasq.conf
# See https://github.com/nicolasff/docker-cassandra/issues/8
RUN echo 'user=root' >> /etc/dnsmasq.conf
# Add the needed route
RUN echo 'address=/my-domain.com/<my_ip>' >> /etc/dnsmasq.conf

# Allow my user's group to start the service
RUN echo ''%${group}' ALL=NOPASSWD:/usr/sbin/service dnsmasq *' >> /etc/sudoers

# Switch to the right user, that belongs to the group ${group}
USER ${user}

然后,当您的容器启动时(例如,在入口点),添加以下行:

sudo service dnsmasq start

还记得NOPASSWD文件中的/etc/sudoers吗?这可以防止系统在启动服务时询问用户的密码。

答案 1 :(得分:-1)

如何使用入口点运行shell脚本来执行您想要的操作