Apache trong Docker: Làm thế nào để tôi có thể truy cập.


17

Tôi mới bắt đầu với Docker và richt Bây giờ tôi đang cố gắng tìm ra cách thiết lập môi trường Apache 2 / PHP được dockerized đầu tiên của tôi. Cho đến nay tôi đã sử dụng máy ảo Linux đầy đủ, nơi tôi đã sử dụng các tệp nhật ký được ghi vào / var / log / apache2, sau đó sử dụng "logrotate" để chuyển sang tệp mới mỗi ngày.

Logfiles chủ yếu được sử dụng để phát hiện lỗi ngay lập tức (tức là đăng nhập vào máy chủ và sử dụng ít hơn để mở các tệp access.log và error.log hiện tại) và cho fail2ban.

Nếu tôi đúng không thể thực hiện được trong môi trường Docker - chủ yếu là vì bạn thường không thể đăng nhập vào container để xem nhật ký. Ngoài ra các bản ghi sẽ bị mất nếu container được gỡ bỏ.

Vậy: Phương pháp phổ biến nhất để làm việc với / giả lập / thay thế access.log / error.log trong tình huống đó là gì? Các giải pháp phổ biến cho cả môi trường sản xuất và phát triển là gì?

Ý tưởng của tôi cho đến nay bao gồm sử dụng chia sẻ NFS (chậm và có thể gây ra xung đột tên tệp nếu không cẩn thận) và logstash (không chắc có đáng để nỗ lực và thực tế cho các trang web nhỏ hơn hoặc thậm chí môi trường dev không?) Nhưng tôi chắc chắn là người thông minh đã đưa ra giải pháp tốt hơn?

Không chắc nó có tạo ra sự khác biệt hay không, nhưng hiện tại tôi đang dựa vào hình ảnh Docker của mình trên php: 5.6-apache .

Câu trả lời:


13

Bạn vẫn có thể sử dụng docker exec -it <your container name> /bin/bashlệnh để vào container của bạn và thực hiện công việc thường xuyên của bạn. Hoặc có thể bạn có thể thay đổi /bin/bashthành lệnh hoặc tập lệnh .shcủa lệnh để thực thi nó.

Để lấy tập tin của bạn ra khỏi container, hãy sử dụng docker cp <container name:/path/to/file> </your local machine/path/>

Và đối với công việc hàng ngày của bạn, bạn có thể sử dụng cronđể ghi lại các lệnh đó. Tôi đặc biệt khuyên bạn nên đặt bí danh cho các lệnh docker thường xuyên của mình. Để tôi có thể sử dụng docker một cách vui vẻ với một vài phím.

Các docker logs <container name/id>lệnh là để xem log khỏi án tử hình của hình ảnh Docker. Nó hiển thị đầu ra chuyển hướng đến thiết bị xuất chuẩn.


Ngoài ra, docker attach <container name>là cách tốt để xem thiết bị xuất chuẩn từ container của bạn. Nhưng xin lưu ý rằng nếu bạn thực hiện ctrl + d hoặc ctrl + c, nó sẽ TERMINATE (sigkill) nhiệm vụ đang diễn ra của bạn. Vì vậy, bạn phải tháo nó ra bằng cách sử dụng phím thoát ctrl+p+q. Nếu bạn chỉ muốn shell vào container của bạn, tôi thích sử dụng execlệnh ở trên.
Fony Lew

6

Làm thế nào về việc viết quyền truy cập và nhật ký lỗi vào thiết bị xuất chuẩn và thiết bị xuất chuẩn?

https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail

https://gist.github.com/afolarin/a2ac14231d9079920864

CHẠY ln -sf / dev / stdout /var/log/nginx/access.log

CHẠY ln -sf / dev / stderr /var/log/nginx/error.log

Ghi nhật ký tập trung với ELK sẽ cho phép giám sát chủ động hơn. Nhưng bạn đã nghĩ về điều đó một mình.


1

Cho đến nay tôi đã tìm thấy " nhật ký docker " được nhắc đến nhiều lần.

Tôi là một Docker mới tuyệt đối, vì vậy có thể giải quyết vấn đề của tôi - nhưng cho đến nay tôi vẫn chưa hiểu hết khái niệm đằng sau lệnh đó.

Docker dường như giữ tất cả đầu ra xuất chuẩn trong các tệp JSON trong / var / lib / docker / container / và cho tôi cơ hội truy cập chúng thông qua lệnh log.

Cho đến nay tôi không chắc làm thế nào để thực sự sử dụng đầu ra.


1

Có thể tính năng này không tồn tại khi câu hỏi được hỏi, nhưng với đối số -v của run, bạn có thể gắn một thư mục trên máy chủ vào một thư mục trong vùng chứa.

docker run -v [host_dir]:[container_dir]

Bằng cách này, các tệp nhật ký (hoặc khác) sẽ tồn tại khi vùng chứa bị xóa và bạn có thể truy cập các tệp như thể apache được cài đặt trên máy chủ chứ không phải trong vùng chứa.

Ngoài ra, bằng cách nào đó bạn có thể đẩy các tệp nhật ký đã sửa đổi đến một vị trí trung tâm. Ngăn xếp Kibana sử dụng filebeat để đạt được điều này, nhưng có thể chạy filebeat một cách độc lập nếu bạn không quan tâm đến phần còn lại của ngăn xếp.


1
Docker đã gắn kết khối lượng gắn kết ba năm trước.
womble

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

hình ảnh docker tôi chọn chỉ liên kết tất cả các tệp * .log với / dev / stdout và / dev / stderr, vì vậy tôi không thể đọc chúng.

Sau khi xóa các tệp và khởi động lại apache, tôi có thể lấy nhật ký từ / var / log / trong docker.

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

Trong tệp cấu hình apache, bạn có thể thêm:
CustomLog / dev / stdout
ErrorLog / dev / stderr

và để xem các bản ghi sử dụng lệnh dưới đây:
docker log container_id

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.