在Docker容器中以非root身份运行nginx会给出权限被拒绝错误

时间:2016-10-02 17:14:04

标签: linux nginx docker permission-denied

我有以下Dockerfile

FROM ubuntu:14.04
EXPOSE 8000

# Install nginx
RUN apt-get update -q \
    && apt-get install --no-install-recommends --no-install-suggests -y -q \
                        nginx \
    && rm -rf /var/lib/apt/lists/*

COPY ./nginx.conf /etc/nginx/
COPY ./index.html /usr/share/nginx/test/

RUN groupadd -r webgroup \
    && useradd -r -m -g webgroup webuser \
    && touch /run/nginx.pid \
    && chown -R webuser:webgroup /var/log/nginx /var/lib/nginx /run/nginx.pid 

USER webuser
CMD nginx

当我运行它时,/var/log/nginx上的权限被拒绝

mikhails-mbp:test-docker-nginx mkuleshov$ docker run -p 8000:8000 mytest
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2016/10/02 17:02:51 [emerg] 5#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)

如果我用bash进入容器,我会看到:

webuser@d190146a0e8d:/var/log/nginx$ ls -la
total 8
drwxr-x--- 2 webuser webgroup 4096 Jun  2 15:16 .
drwxrwxr-x 8 root    syslog   4096 Oct  2 17:02 ..

怎么可能?在上述会话期间,我也无法在该用户下创建文件。

有帮助的内容:删除/var/log/nginx并重新创建。但我不知道为什么会这样。

没有SELinux。

有没有人遇到过这样的事情,或者有什么我做错了吗?

P.S。如果docker info可以帮助

,这是mikhails-mbp:test-docker-nginx mkuleshov$ docker info Containers: 179 Running: 0 Paused: 0 Stopped: 179 Images: 901 Server Version: 1.11.2 Storage Driver: aufs Root Dir: /mnt/sda1/var/lib/docker/aufs Backing Filesystem: extfs Dirs: 1109 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge null host Kernel Version: 4.4.12-boot2docker Operating System: Boot2Docker 1.11.2 (TCL 7.1); HEAD : a6645c3 - Wed Jun 1 22:59:51 UTC 2016 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.955 GiB Name: default ID: 3K5S:3QBN:BXGY:FASS:VG6P:D4CS:UXRK:GYXB:HJQG:SIQH:F6KQ:N4BN Docker Root Dir: /mnt/sda1/var/lib/docker Debug mode (client): false Debug mode (server): true File Descriptors: 15 Goroutines: 32 System Time: 2016-10-02T17:08:51.355144074Z EventsListeners: 0 Username: mkuleshov Registry: https://index.docker.io/v1/ Labels: provider=virtualbox
serialize()

P.P.S。这是一个包含该案例配置的测试仓库:https://github.com/aides/test-docker-nginx

1 个答案:

答案 0 :(得分:3)

最有可能将您的用户添加到adm组中将解决您的问题。

尝试使用sudo usermod -aG adm webuser

更多详情:https://askubuntu.com/questions/421684/cant-access-apache-error-logs