망루를 사용하시나요? 이 읽어보기 하단에 있는 망루에 관한 참고 사항을 참조하세요.
2023.01
부터 external.conf
파일을 통해 lighttpd에 대한 수정 사항이 있는 경우 이제 이 파일을 대신 /etc/lighttpd/conf-enabled/whateverfile.conf
에 매핑해야 합니다.
Docker 및 libseccomp <2.5의 알려진 문제로 인해 이전 버전의 libseccomp2
(예: Debian/Raspbian Buster 또는 Ubuntu 20.04 및 CentOS 7)가 있는 호스트 시스템에서 2022.04
이상을 실행하는 데 문제가 발생할 수 있습니다.
첫 번째 권장 사항은 libseccomp
의 최신(및 수정된) 버전을 포함하는 호스트 OS를 업그레이드하는 것입니다.
절대 이 작업을 수행할 수 없는 경우 일부 사용자는 debian의 백포트를 통해 libseccomp2
업데이트하거나 Ubuntu의 업데이트를 통해 유사한 업데이트에 성공했다고 보고했습니다. 이 해결 방법을 직접 시도해 볼 수 있습니다 (참고: 최신 docker.io
필요할 수도 있습니다(자세한 내용은 여기 참조).
일부 사용자는 2022.04
이상에서 --privileged
플래그 사용과 관련된 문제를 보고했습니다. TL;DR, 해당 모드를 사용하지 말고 대신 허용되는 대문자(필요한 경우)를 명시적으로 지정하세요.
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services :
pihole :
container_name : pihole
image : pihole/pihole:latest
# For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
ports :
- " 53:53/tcp "
- " 53:53/udp "
- " 67:67/udp " # Only required if you are using Pi-hole as your DHCP server
- " 80:80/tcp "
environment :
TZ : ' America/Chicago '
# WEBPASSWORD: 'set a secure password here or it will be random'
# Volumes store your data between container upgrades
volumes :
- ' ./etc-pihole:/etc/pihole '
- ' ./etc-dnsmasq.d:/etc/dnsmasq.d '
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add :
- NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
restart : unless-stopped
docker compose up -d
실행하여 pi-hole을 빌드하고 시작합니다(이전 시스템에서는 구문이 docker-compose
일 수 있음).bridge
네트워크 설정을 사용하는 경우 Pi-hole 웹 UI를 사용하여 DNS 설정 인터페이스 수신 동작을 "모든 인터페이스에서 수신하고 모든 원본 허용"으로 변경합니다. (이는 환경 변수 DNSMASQ_LISTENING
all
로 설정하여 달성할 수도 있습니다)다음은 동등한 docker 실행 스크립트입니다.
Pi-hole 기능을 갖춘 경량 x86 및 ARM 컨테이너를 만드는 Docker 프로젝트입니다.
이 컨테이너는 2개의 인기 있는 포트인 포트 53과 포트 80을 사용하므로 기존 애플리케이션 포트와 충돌할 수 있습니다 . 포트 53/80을 사용하는 다른 서비스나 Docker 컨테이너가 없는 경우(있는 경우 역방향 프록시 예를 보려면 아래를 계속 읽으십시오) 이 컨테이너를 실행하는 데 필요한 최소 인수는 docker_run.sh 스크립트에 있습니다.
SELinux 시행 정책과 함께 Red Hat 기반 배포판을 사용하는 경우 다음과 같이 볼륨 줄에 :z
추가하세요.
-v "$(pwd)/etc-pihole:/etc/pihole:z"
-v "$(pwd)/etc-dnsmasq.d:/etc/dnsmasq.d:z"
이미지 업데이트를 위해 컨테이너를 다시 생성할 때 데이터를 유지하려면 볼륨을 사용하는 것이 좋습니다. IP 조회 변수는 모든 사람에게 작동하지 않을 수 있습니다. 해당 값을 검토하고 필요한 경우 IP 및 IPv6를 하드 코딩하십시오.
docker_run.sh
호출할 때 PIHOLE_BASE
환경 변수를 설정하여 영구 데이터를 저장할 위치를 사용자 정의할 수 있습니다(예: PIHOLE_BASE=/opt/pihole-storage ./docker_run.sh
). PIHOLE_BASE
설정되지 않은 경우 스크립트를 호출하면 파일이 현재 디렉터리에 저장됩니다.
자동 광고 목록 업데이트 - 3.0 이상 릴리스부터 cron
이 컨테이너에 내장되어 목록의 최신 버전을 가져와 로그를 플러시합니다. 자정 로그 회전이 해당 시간대의 자정과 동기화되도록 TZ 환경 변수를 설정하십시오 .
Docker Pi-hole 컨테이너 내에서 DHCP를 실행하는 방법은 여러 가지가 있지만 이는 약간 더 발전된 방식이며 하나의 크기가 모든 것에 적합하지는 않습니다. DHCP 및 Docker의 다중 네트워크 모드는 당사 문서 사이트인 Docker DHCP 및 네트워크 모드에서 자세히 다룹니다.
Docker 컨테이너 내부의 다양한 항목을 사용자 정의하려는 경우 다른 환경 변수가 있습니다.
변하기 쉬운 | 기본 | 값 | 설명 |
---|---|---|---|
TZ | UTC | <Timezone> | 로그가 UTC 자정이 아닌 현지 자정에 회전하도록 시간대를 설정하세요. |
WEBPASSWORD | 무작위의 | <Admin password> | http://pi.hole/admin 비밀번호. docker logs pihole | grep random 무작위 패스를 찾으려면 docker logs pihole | grep random . |
FTLCONF_LOCAL_IPV4 | 설정되지 않음 | <Host's IP> | 웹 차단 모드에서 사용되는 서버의 LAN IP로 설정합니다. |
변하기 쉬운 | 기본 | 값 | 설명 |
---|---|---|---|
PIHOLE_DNS_ | 8.8.8.8;8.8.4.4 | IP는 ; 로 구분됩니다. | 쿼리를 전달할 Pi-hole의 업스트림 DNS 서버(세미콜론으로 구분) ( #[port number] 사용하여 비표준 포트 지원) 예: 127.0.0.1#5053;8.8.8.8;8.8.4.4 (IP 대신 Docker 서비스 이름 및 링크 지원) 예: upstream0;upstream1 여기서 upstream0 및 upstream1 docker 서비스의 서비스 이름 또는 링크입니다.참고: 이 환경 변수의 존재는 이것이 업스트림 DNS의 유일한 관리라고 가정합니다. 웹 인터페이스를 통해 추가된 업스트림 DNS는 컨테이너 다시 시작/다시 생성 시 덮어쓰여집니다. |
DNSSEC | false | <"true"|"false"> | DNSSEC 지원 활성화 |
DNS_BOGUS_PRIV | true | <"true"|"false"> | 비공개 범위에 대한 역방향 조회를 전달하지 마세요. |
DNS_FQDN_REQUIRED | true | <"true"|"false"> | FQDN이 아닌 것은 전달하지 마세요. |
REV_SERVER | false | <"true"|"false"> | 장치 이름 확인을 위해 DNS 조건부 전달 활성화 |
REV_SERVER_DOMAIN | 설정되지 않음 | 네트워크 도메인 | 조건부 전달이 활성화된 경우 로컬 네트워크 라우터의 도메인을 설정합니다. |
REV_SERVER_TARGET | 설정되지 않음 | 라우터의 IP | 조건부 전달이 활성화된 경우 로컬 네트워크 라우터의 IP를 설정합니다. |
REV_SERVER_CIDR | 설정되지 않음 | 역방향 DNS | 조건부 전달이 활성화된 경우 역방향 DNS 영역을 설정합니다(예: 192.168.0.0/24 ). |
DHCP_ACTIVE | false | <"true"|"false"> | DHCP 서버를 활성화합니다. 정적 DHCP 임대는 사용자 정의 /etc/dnsmasq.d/04-pihole-static-dhcp.conf 를 사용하여 구성할 수 있습니다. |
DHCP_START | 설정되지 않음 | <Start IP> | DHCP 서버가 전달할 IP 주소 범위의 시작입니다(DHCP 서버가 활성화된 경우 필수). |
DHCP_END | 설정되지 않음 | <End IP> | DHCP 서버가 전달할 IP 주소 범위의 끝입니다(DHCP 서버가 활성화된 경우 필수). |
DHCP_ROUTER | 설정되지 않음 | <Router's IP> | DHCP 서버가 보낸 라우터(게이트웨이) IP 주소입니다(DHCP 서버가 활성화된 경우 필수). |
DHCP_LEASETIME | 24 | <hours> | DHCP 임대 시간(시간)입니다. |
PIHOLE_DOMAIN | lan | <domain> | DHCP 서버에서 보낸 도메인 이름입니다. |
DHCP_IPv6 | false | <"true"|"false"> | DHCP 서버 IPv6 지원(SLAAC + RA)을 활성화합니다. |
DHCP_rapid_commit | false | <"true"|"false"> | DHCPv4 빠른 커밋(빠른 주소 할당)을 활성화합니다. |
VIRTUAL_HOST | ${HOSTNAME} | <Custom Hostname> | 귀하의 웹 서버 '가상 호스트'는 무엇입니까? 이 호스트 이름/IP를 통해 관리자에 액세스하면 기본 'http://pi.hole/admin/' 주소 외에 화이트리스트/블랙리스트를 변경할 수 있습니다. |
IPv6 | true | <"true"|"false"> | unraid 호환성을 위해 false인 경우 DNS/웹 서비스에서 모든 IPv6 구성을 제거합니다. |
TEMPERATUREUNIT | c | <c|k|f> | 선호하는 온도 단위를 c : 섭씨, k : 켈빈 또는 f 화씨 단위로 설정하세요. |
WEBUIBOXEDLAYOUT | boxed | <boxed|traditional> | 박스형 레이아웃 사용(대형 화면에서 작업할 때 유용함) |
QUERY_LOGGING | true | <"true"|"false"> | 쿼리 로깅 활성화 여부. |
WEBTHEME | default-light | <"default-dark"|"default-darker"|"default-light"|"default-auto"|"high-contrast"|"high-contrast-dark"|"lcars"> | 사용할 사용자 인터페이스 테마입니다. |
WEBPASSWORD_FILE | 설정되지 않음 | <Docker secret path> | Docker 비밀을 사용하여 관리자 비밀번호를 설정하세요. WEBPASSWORD 설정된 경우 WEBPASSWORD_FILE 은 무시됩니다. WEBPASSWORD 비어 있고 WEBPASSWORD_FILE 읽을 수 있는 유효한 파일 경로로 설정된 경우 WEBPASSWORD WEBPASSWORD_FILE 의 내용으로 설정됩니다. |
변하기 쉬운 | 기본 | 값 | 설명 |
---|---|---|---|
INTERFACE | 설정되지 않음 | <NIC> | 기본 예제 docker run 명령에서는 기본값이 제대로 작동합니다. --net host 모드와 함께 DHCP를 사용하려는 경우 이를 사용자 정의하거나 DNSMASQ_LISTENING을 수행해야 할 수도 있습니다. |
DNSMASQ_LISTENING | 설정되지 않음 | <local|all|single> | local 모든 로컬 서브넷을 수신하고, all 로컬 외에 인터넷 원본 서브넷에서 수신을 허용하며, single 지정된 인터페이스에서만 수신합니다. |
WEB_PORT | 설정되지 않음 | <PORT> | 이렇게 하면 Pi-hole의 '웹페이지 차단' 기능이 중단되지만 Synology 또는 --net=host docker 인수를 실행하는 것과 같은 고급 설정에 도움이 될 수 있습니다. 이 가이드에서는 Linux 라우터 DNAT 규칙을 사용하여 차단된 웹페이지 기능을 복원하는 방법을 설명합니다. 대체 Synology 설치 방법 |
WEB_BIND_ADDR | 설정되지 않음 | <IP> | Lighttpd의 바인드 주소. 설정하지 않은 채로 두면 lighttpd는 대신 FTLCONF_LOCAL_IPV4 사용하는 호스트 네트워킹 모드에서 실행되는 경우를 제외하고 모든 인터페이스에 바인딩됩니다. |
SKIPGRAVITYONBOOT | 설정되지 않음 | <unset|1> | 컨테이너를 부팅할 때 Gravity 데이터베이스 업데이트를 건너뛰려면 이 옵션을 사용하세요. 기본적으로 이 환경 변수는 설정되지 않으므로 컨테이너가 시작될 때 Gravity 데이터베이스가 업데이트됩니다. 이 환경 변수를 1(또는 다른 값)로 설정하면 컨테이너가 시작될 때 Gravity 데이터베이스가 업데이트되지 않습니다. |
CORS_HOSTS | 설정되지 않음 | <FQDNs delimited by ,> | CORS가 허용되는 도메인/하위 도메인 목록입니다. 와일드카드는 지원되지 않습니다. 예: CORS_HOSTS: domain.com,home.domain.com,www.domain.com . |
CUSTOM_CACHE_SIZE | 10000 | 숫자 | dnsmasq의 캐시 크기를 설정합니다. 기본 캐시 크기를 늘리거나 0으로 설정하는 데 유용합니다. DNSSEC 가 "true"이면 이 설정이 무시됩니다. |
FTL_CMD | no-daemon | no-daemon -- <dnsmasq option> | dnsmasq가 시작되는 옵션을 사용자 정의하세요. 예를 들어 no-daemon -- --dns-forward-max 300 최대값을 늘립니다. 고부하 설정에서 동시 DNS 쿼리 수. |
FTLCONF_[SETTING] | 설정되지 않음 | 문서에 따라 | FTLDNS 구성 페이지에 설명된 설정으로 pihole-FTL.conf를 사용자 정의합니다. 예를 들어 LOCAL_IPV4를 사용자 정의하려면 FTLCONF_LOCAL_IPV4 환경 변수가 설정되어 있는지 확인하세요. |
변하기 쉬운 | 기본 | 값 | 설명 |
---|---|---|---|
DNSMASQ_USER | 설정되지 않음 | <pihole|root> | FTLDNS가 실행되는 사용자를 변경할 수 있습니다. 기본값: pihole , Synology NAS와 같은 일부 시스템에서는 이를 root 로 변경해야 할 수도 있습니다(#963 참조) |
PIHOLE_UID | 999 | 숫자 | 호스트 사용자 ID와 일치하도록 이미지의 기본 pihole 사용자 ID를 재정의합니다. 중요 : ID는 컨테이너 내부에서 이미 사용 중이어서는 안 됩니다! |
PIHOLE_GID | 999 | 숫자 | 호스트 그룹 ID와 일치하도록 이미지의 기본 pihole 그룹 ID를 재정의합니다. 중요 : ID는 컨테이너 내부에서 이미 사용 중이어서는 안 됩니다! |
WEB_UID | 33 | 숫자 | 호스트 사용자 ID와 일치하도록 이미지의 기본 www-data 사용자 ID를 재정의합니다. 중요 : ID는 컨테이너 내부에서 이미 사용 중이어서는 안 됩니다! (PIHOLE_UID를 사용하는 경우 PIHOLE_UID 와 다른지 확인하십시오) |
WEB_GID | 33 | 숫자 | 호스트 그룹 ID와 일치하도록 이미지의 기본 www-data 그룹 ID를 재정의합니다. 중요 : ID는 컨테이너 내부에서 이미 사용 중이어서는 안 됩니다! (PIHOLE_GID를 사용하는 경우 PIHOLE_GID 와 다른지 확인하십시오.) |
WEBLOGS_STDOUT | 0 | 0|1 | 정의된 파일에 대한 로그 0개, stdout으로의 리디렉션 액세스 및 오류 로그 1개 |
이러한 기능은 여전히 작동할 수 있지만 향후 버전에서는 제거될 가능성이 높습니다. 해당되는 경우 대체 변수 이름이 표시됩니다. 대체 변수의 사용법은 위의 표를 검토하세요.
Docker 환경 Var. | 설명 | 대체자 |
---|---|---|
CONDITIONAL_FORWARDING | 장치 이름 확인을 위해 DNS 조건부 전달 활성화 | REV_SERVER |
CONDITIONAL_FORWARDING_IP | 조건부 전달이 활성화된 경우 로컬 네트워크 라우터의 IP를 설정합니다. | REV_SERVER_TARGET |
CONDITIONAL_FORWARDING_DOMAIN | 조건부 전달이 활성화된 경우 로컬 네트워크 라우터의 도메인을 설정합니다. | REV_SERVER_DOMAIN |
CONDITIONAL_FORWARDING_REVERSE | 조건부 전달이 활성화된 경우 로컬 네트워크 라우터의 역방향 DNS를 설정합니다(예: 0.168.192.in-addr.arpa ) | REV_SERVER_CIDR |
DNS1 | 기본 업스트림 DNS 공급자, 기본값은 google DNS입니다. | PIHOLE_DNS_ |
DNS2 | 보조 업스트림 DNS 공급자, 기본값은 google DNS입니다. 하나의 DNS만 사용해야 하는 경우 no . | PIHOLE_DNS_ |
ServerIP | 웹 차단 모드 및 lighttpd 바인드 주소에서 사용되는 서버의 LAN IP로 설정 | FTLCONF_LOCAL_IPV4 |
ServerIPv6 | IPv6 광고를 완전히 차단하기 위해 서버의 LAN IPv6에 v6 네트워크를 설정한 경우 | FTLCONF_LOCAL_IPV6 |
FTLCONF_REPLY_ADDR4 | 웹 차단 모드 및 lighttpd 바인드 주소에서 사용되는 서버의 LAN IP로 설정 | FTLCONF_LOCAL_IPV4 |
FTLCONF_REPLY_ADDR6 | IPv6 광고를 완전히 차단하기 위해 서버의 LAN IPv6에 v6 네트워크를 설정한 경우 | FTLCONF_LOCAL_IPV6 |
docker 실행 형식 스타일에서 이러한 환경 변수를 사용하려면 다음과 같이 하십시오: -e DNS1=1.1.1.1
다음은 docker-compose/docker 실행에 대한 다른 인수에 대한 요약입니다.
도커 인수 | 설명 |
---|---|
-p <port>:<port> 권장 | 노출할 포트(53, 80, 67), Pi-holes HTTP 및 DNS 서비스에 필요한 최소 포트 |
--restart=unless-stopped 추천 | 부팅 시 또는 충돌 발생 시 Pi-hole을 자동으로 (재)시작합니다. |
-v $(pwd)/etc-pihole:/etc/pihole 추천 | Pi-hole 구성의 볼륨은 Docker 이미지 업데이트 전반에 걸쳐 변경 사항을 유지하는 데 도움이 됩니다. |
-v $(pwd)/etc-dnsmasq.d:/etc/dnsmasq.d 추천 | dnsmasq 구성의 볼륨은 Docker 이미지 업데이트 전반에 걸쳐 변경 사항을 유지하는 데 도움이 됩니다. |
--net=host 선택 과목 | 다른 웹 애플리케이션을 실행하지 않는 경우 -p <port>:<port> 인수 대신 사용할 수 있습니다(-p와 동시에 사용할 수 없음). DHCP는 --net=host와 함께 가장 잘 실행됩니다. 그렇지 않으면 라우터가 dhcp-relay 설정을 지원해야 합니다. |
--cap-add=NET_ADMIN 추천 | DHCP에 일반적으로 추가되는 기능입니다. 다른 기능에 대해서는 아래 기능에 대한 참고 사항을 참조하세요. |
--dns=127.0.0.1 선택 과목 | Pi-hole의 DNSMasq에서 DHCP 호스트 이름을 확인할 수 있도록 컨테이너의 확인 설정을 localhost로 설정하고, 컨테이너를 다시 시작할 때 확인 오류를 수정할 수 있습니다. |
--dns=1.1.1.1 선택 과목 | DNSMasq 시작에 문제가 있는 경우를 대비해 선택한 백업 서버를 설정합니다. |
--env-file .env 선택 과목 | -e key=value 설정을 대체하는 docker용 환경 변수를 저장하는 파일입니다. 편의상 여기에 |
docker exec -it pihole_container_name pihole -a -p
- 프롬프트에 비밀번호를 입력하세요.-p 8080:80
과 같은 docker의 포트 전달을 사용하여 다른 포트를 Pi-hole 포트 80에 매핑할 수 있습니다. 레거시 IP 차단 모드를 사용하는 경우 이 포트를 다시 매핑하면 안 됩니다.DEFAULT_HOST
환경이어야 하며 Pi-hole 컨테이너에 대해 일치하는 VIRTUAL_HOST
를 설정해야 합니다. 문제가 있는 경우 자세한 내용은 nginxproxy/nginx-proxy 추가 정보를 읽어보세요.bridge
호스트 네트워크에서 컨테이너를 격리합니다. 이는 보다 안전한 설정이지만 인터페이스 수신 동작 에 대한 Pi-hole DNS 옵션을 "모든 인터페이스에서 수신하고 모든 출처 허용"으로 설정해야 합니다. Ubuntu(17.10+) 및 Fedora(33+)의 최신 릴리스에는 기본적으로 캐싱 DNS 스텁 확인자를 구현하도록 구성된 systemd-resolved
가 포함되어 있습니다. 이렇게 하면 pi-hole이 포트 53에서 수신 대기하는 것을 방지할 수 있습니다. 스텁 확인자는 sudo sed -r -i.orig 's/#?DNSStubListener=yes/DNSStubListener=no/g' /etc/systemd/resolved.conf
이는 스텁 확인자를 가리키는 네임서버 설정을 변경하지 않으므로 DNS 확인을 방지합니다. /etc/resolv.conf
심볼릭 링크를 /run/systemd/resolve/resolv.conf
가리키도록 변경합니다. 이는 시스템의 netplan
따르도록 자동으로 업데이트됩니다. sudo sh -c 'rm /etc/resolv.conf && ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf'
이렇게 변경한 후에는 systemctl restart systemd-resolved
사용하여 systemd-resolved를 다시 시작해야 합니다.
pi-hole이 설치되면 이를 사용하도록 클라이언트를 구성해야 합니다(여기 참조). 위의 심볼릭 링크를 사용한 경우 Docker 호스트는 DHCP에서 제공하는 모든 항목이나 구성한 정적 설정을 사용합니다. Docker 호스트의 네임서버를 명시적으로 설정하려면 /etc/netplan
에 있는 netplan을 편집한 다음 sudo netplan apply
실행하세요. 예시 넷플랜:
network :
ethernets :
ens160 :
dhcp4 : true
dhcp4-overrides :
use-dns : false
nameservers :
addresses : [127.0.0.1]
version : 2
systemd-resolved
완전히 비활성화하는 것도 가능합니다. 그러나 이로 인해 VPN의 이름 확인에 문제가 발생할 수 있습니다(버그 보고서 참조). 또한 systemd-resolved가 기본 렌더러로 사용되므로 netplan의 기능도 비활성화됩니다( man netplan
참조). 서비스를 비활성화하기로 선택한 경우, 예를 들어 새 /etc/resolv.conf
생성하여 네임서버를 수동으로 설정해야 합니다.
이전 Ubuntu 릴리스(약 17.04) 사용자는 dnsmasq를 비활성화해야 합니다.
@Rikj000님이 Dokku에 Pi-hole을 설치하는 사용자를 돕기 위한 가이드를 제작했습니다.
기본 Docker 태그는 다음 표에 설명되어 있습니다. 전체 태그 목록을 보려면 여기를 클릭하세요. 릴리스에 포함된 Pi-hole Core, 웹 및 FTL의 특정 버전을 보려면 GitHub 릴리스 노트를 참조하세요.
날짜 기반(증분된 "패치" 버전 포함)은 어떤 종류의 의미론적 버전 번호와도 관련이 없으며 오히려 날짜는 새 버전과 이전 버전을 구별하는 데 사용됩니다. 릴리스 노트에는 핵심 Pi-hole 구성 요소에 대한 변경 사항을 포함하여 컨테이너 변경 사항에 대한 전체 세부 정보가 항상 포함됩니다.
꼬리표 | 설명 |
---|---|
latest | 항상 최신 릴리스 |
2022.04.0 | 날짜 기반 릴리스 |
2022.04.1 | 특정 달의 두 번째 릴리스 |
dev | latest 과 유사하지만 개발 브랜치용(가끔 푸시됨) |
*beta | 다가오는 버전의 초기 베타 릴리스 - 여기 드래곤이 있습니다 |
nightly | dev 과 비슷하지만 매일 밤 푸시하고 핵심 Pi-hole 구성 요소(Pi-hole, 웹, FTL)의 최신 development 지점에서 가져옵니다. |
표준 Pi-hole 사용자 정의 기능은 이 도커에 적용되지만 도커 볼륨 마운트를 사용하여 컨테이너 기본값에 호스트 저장 파일 구성을 매핑하는 등의 도커 변형이 있습니다. 그러나 이러한 구성 파일을 읽기 전용으로 마운트하는 것은 피해야 합니다. 일반적인 Docker 업그레이드 패턴인 Pi-hole 컨테이너를 제거한 경우 구성을 유지하기 위해 볼륨도 중요합니다.
업그레이드( pihole -up
) 또는 재구성( pihole -r
)을 시도하지 마십시오. 업그레이드를 위해 새 이미지가 출시됩니다. 기존 컨테이너를 새로 업그레이드된 이미지로 교체하여 업그레이드하는 것이 'Docker 방식'입니다. 오래 지속되는 도커 컨테이너는 이식성과 재현성을 목표로 하기 때문에 도커 방식이 아닙니다. 자주 다시 만드는 것은 어떨까요? 당신이 할 수 있다는 것을 증명하기 위해서입니다.
docker pull pihole/pihole
docker rm -f pihole
docker run <args> pihole/pihole
( <args>
기본 실행 볼륨 및 환경 변수임)이런 업그레이드 스타일이 왜 좋은가요? 몇 가지 이유: 모든 사람이 테스트를 거쳐 작동하는 것으로 알려진 동일한 기본 이미지에서 시작합니다. 업데이트를 롤아웃할 때 A에서 B로, B에서 C로, A에서 C로 업그레이드하는 것에 대해 걱정할 필요가 없습니다. 이를 통해 복잡성이 줄어들고 볼륨에 대한 사용자 정의를 유지하면서 매번 '새로 시작'할 수 있습니다. 기본적으로 저는 귀하의 컨테이너에 대해 Phoenix 서버 원칙을 권장합니다.
Pi-hole을 재구성하려면 기존 컨테이너 환경 변수를 사용해야 하며, 필요한 변수가 없는 경우 웹 UI 또는 CLI 명령을 사용하십시오.
다음은 Pi-hole 문서의 관련 위키 페이지입니다. 웹 인터페이스 또는 명령줄 도구를 사용하여 pihole에 대한 변경 사항을 구현할 수 있습니다.
내장된 pihole 명령이 다음과 같이 docker exec <container> <command>
통해 작동하도록 모든 pihole 유틸리티를 설치합니다.
docker exec pihole_container_name pihole updateGravity
docker exec pihole_container_name pihole -w spclient.wg.spotify.com
docker exec pihole_container_name pihole -wild example.com
필요한 경우 컨테이너 내부의 웹서버와 DNS 서비스를 맞춤 설정할 수 있습니다. /etc/dnsmasq.d/
에 볼륨 마운트하는 모든 구성 파일은 컨테이너가 시작되거나 다시 시작될 때 dnsmasq에 의해 로드되거나 Pi-hole 구성을 수정해야 하는 경우 /etc/dnsmasq.d/01-pihole.conf
에 있습니다. /etc/dnsmasq.d/01-pihole.conf
. docker 시작 스크립트는 시작하기 전에 구성 테스트를 실행하므로 docker 로그의 오류에 대해 알려줍니다.
마찬가지로 웹서버의 경우 /etc/lighthttpd에서 구성을 사용자 정의할 수 있습니다.
부팅 시 docker 시스템 서비스가 자동으로 시작되고 --restart=unless-stopped
사용하여 컨테이너를 실행하는 한 컨테이너는 항상 부팅 시 시작되고 충돌 시 다시 시작되어야 합니다. 대신 Docker 컨테이너를 systemd 서비스로 실행하려면 pihole.service 파일을 "/etc/systemd/system"에 추가하세요. 컨테이너 이름이 무엇이든 사용자 정의하고 docker 실행에서 --restart=unless-stopped
제거하세요. 그런 다음 위의 docker run 명령을 사용하여 처음으로 docker 컨테이너를 생성한 후 "systemctl start pihole" 또는 "systemctl stop pihole"( docker start
/ docker stop
대신)을 사용하여 이를 제어할 수 있습니다. "systemctl 활성화 pihole"을 사용하여 부팅 시 자동 시작되도록 활성화할 수도 있습니다( --restart=unless-stopped
및 부팅 시 docker 서비스 자동 시작을 확인하는 것과 반대).
참고: 초기 실행 후 systemctl이 컨테이너 제어를 시작하기 전에 "docker stop pihole"을 사용하여 docker 컨테이너를 수동으로 중지해야 할 수도 있습니다.
DNSMasq/FTLDNS는 다음과 같은 기능을 사용할 수 있을 것으로 예상합니다.
CAP_NET_BIND_SERVICE
: 1024 미만의 TCP/UDP 소켓에 대한 FTLDNS 바인딩을 허용합니다(특히 포트 53의 DNS 서비스).CAP_NET_RAW
: 원시 및 패킷 소켓 사용(DHCPv6 요청을 처리하고 IP를 임대하기 전에 사용 중이 아닌지 확인하는 데 필요함)CAP_NET_ADMIN
: 라우팅 테이블 및 기타 네트워크 관련 작업 수정(특히 유니캐스트 패킷을 사용하여 DHCP 요청에 응답하기 위해 인접 테이블에 항목 삽입)CAP_SYS_NICE
: FTL은 처리 시간이 부족한 경우 처리 시간을 더 확보하기 위해 자신을 중요한 프로세스로 설정합니다.CAP_CHOWN
: FTL이 pihole
과 다른 사용자로 시작된 경우 로그 파일 및 데이터베이스의 소유권을 변경할 수 있어야 합니다. 이 이미지는 루트가 아닌 사용자로 실행되는 경우에도 해당 기능(사용 가능한 경우)을 FTLDNS 프로세스에 자동으로 부여합니다.
기본적으로 docker에는 권한이 없는 컨테이너에 대한 NET_ADMIN
기능이 포함되어 있지 않으며 --cap-add=NET_ADMIN
사용하여 명시적으로 컨테이너에 추가하는 것이 좋습니다.
그러나 DHCP 및 IPv6 라우터 광고를 사용하지 않는 경우 건너뛰어도 안전합니다. 대부분의 편집증 환자의 경우 FTLDNS가 자동으로 해당 기능을 얻지 못하도록 NET_RAW
기능을 명시적으로 삭제하는 것도 가능해야 합니다.
우리는 많은 사람들이 Pi-hole 컨테이너를 최신 상태로 유지하기 위해 Watchtower를 사용한다는 것을 알았습니다. 같은 이유로 베어 메탈 설치 시 자동 업데이트 기능을 제공하지 않으므로 시스템이 Pi-hole 컨테이너를 자동으로 업데이트하도록 해서는 안 됩니다 . 특히 무인. 문제가 발생하지 않도록 최선을 다하는 만큼 때로는 문제가 발생할 수 있으므로 실행하려는 컨테이너 버전을 수동으로 가져와서 업데이트할 시간을 확보해야 합니다. 업그레이드 프로세스는 다음과 같이 진행되어야 합니다.
Pi-hole은 네트워크의 필수적인 부분이므로 한밤중에 무인 업데이트로 인해 무너지지 않도록 하십시오.
Docker와 관련된 것으로 의심되는 경우 GitHub 프로젝트에 문제를 보고해 주세요. Pi-hole 또는 일반적인 Docker 질문에 대한 답변은 사용자 포럼에서 가장 잘 답변됩니다.