Docker-compose无法启动apache服务器

时间:2020-03-14 11:01:06

标签: apache docker docker-compose

当我在目录中运行sudo docker-compose up时,出现此错误。我正在尝试制作一个容器,该容器托管一个php网站,您可以在其中进行whoami。 谢谢

(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
| no listening sockets available, shutting down
| AH00015: Unable to open logs

Dockerfile:

FROM ubuntu:16.04

RUN apt update

RUN apt install -y apache2 php libapache2-mod-php 

RUN useradd -d /home/cp/ -m -s /bin/nologin cp

WORKDIR /home/cp

COPY source .

USER cp

ENTRYPOINT service apache2 start && /bin/bash

docker-compose.yml

version: '2'

services:
   filebrowser:
        build: .
        ports:
            - '8000:80'
        stdin_open: true
        tty: true
        volumes:
            - ./source:/var/www/html
            - ./logs:/var/log/apache2

1 个答案:

答案 0 :(得分:1)

在类似Unix的操作系统中有一个长期的通用规则,即只有root用户才能打开“低”端口0-1023。由于您试图在默认的HTTP端口80上运行Apache,但是您以非root用户身份运行它,因此您会看到“权限被拒绝”错误。

最简单的答案是使用预先安装了PHP和Apache的预构建映像。 Docker Hub php image包括此变量。您可以使用更简单的Dockerfile:

FROM php:7.4-apache
# Has Apache, mod-php preinstalled and a correct CMD already,
# so the only thing you need to do is
COPY source /var/www/html

# If you want to run as a non-root user, you can specify
RUN useradd -r -U cp
ENV APACHE_RUN_USER cp
ENV APACHE_RUN_GROUP cp

具有匹配的docker-compose.yml

version: '3' # version 2 vs 3 doesn't really matter
services:
  filebrowser:
    build: .
    ports:
      - '8000:80'
    volumes:
      - ./logs:/var/log/apache2

如果您想从头开始构建,下一个最简单的选择是Apache User指令:让您的容器以root身份启动(以便可以绑定到端口80),然后指示Apache切换到非特权用户启动后。标准php:...-apache图像有一个选项可以自行执行,如上所示。