2017-05-19 220 views
0

主要任務是執行碼頭集裝箱和尾部日誌文件。在另一個碼頭集裝箱內使用碼頭集裝箱的數據

docker exec container_to_analyse tail -f /var/log...xy.log 

被執行和stdout被傳遞給解析,並做一些指標: 這是正在這裏Python項目中完成的。

工作完全沒問題,直到我嘗試將我的項目設置爲泊塢窗容器。

現在我不能執行到所需的容器,我還沒有找到訪問container_to_analyse數據並在公制容器內使用它的方法。

Dockerfile:

FROM python:2.7 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /metrics_docker 
COPY ./* /metrics_docker/ 
WORKDIR /metrics_docker 
RUN pip install -r requirements.txt 
CMD ["python" , "./data_pusher.py"] 

我的問題是,如何公開駐留內的/ var /日誌...文件到我的衡量標準容器,以便它可以使用它container_to_analyse日誌。

+0

推出? – user2915097

+0

從'container_to_analyse'將日誌文件掛載到'metrics_container'中的某處並掛載它怎麼樣? – ItayB

+0

你可以爲兩個容器添加'run'命令嗎? (或撰寫文件),我會盡力幫助.. – ItayB

回答

2

使用--volumes-from選項(如--volumes-from container_to_analyse)並聲明/ var/log /不管VOLUME在Dockerfile中。然後你可以訪問metrics_container中的/ var/log /。

+0

這麼簡單,但我錯過了,謝謝! –

1

這是一種方法對共享文件如何一個簡單的例子:

version: "3" 

services: 
    app_writer: 
    image: ubuntu 
    command: sh -c "while true; do date | tee -a /var/log/shared/app.log; sleep 1; done" 
    volumes: 
     - ./shared/:/var/log/shared/ 
    app_reader: 
    image: ubuntu 
    command: sh -c "tail -F /var/log/shared/app.log" 
    volumes: 
     - ./shared/:/var/log/shared/ 

運行docker-compose up

app_reader_1 | Thu May 18 21:35:12 UTC 2017 
app_writer_1 | Thu May 18 21:35:12 UTC 2017 
app_writer_1 | Thu May 18 21:35:13 UTC 2017 
app_reader_1 | Thu May 18 21:35:13 UTC 2017 
app_writer_1 | Thu May 18 21:35:14 UTC 2017 
app_reader_1 | Thu May 18 21:35:14 UTC 2017 
app_writer_1 | Thu May 18 21:35:15 UTC 2017 
app_reader_1 | Thu May 18 21:35:15 UTC 2017 

我更喜歡這種方法相對於Dockerfile VOLUME

相同,但沒有搬運工,撰寫:/var/log/xy.log ...`:它使用`搬運工運行-v my_dir_on_host

mkdir shared/ 
docker run -v ${PWD}/shared/:/var/log/shared/ -t -d ubuntu sh -c "while true; do date | tee -a /var/log/shared/app.log; sleep 1; done" 
docker run -v ${PWD}/shared/:/var/log/shared/ -t ubuntu sh -c "tail -F /var/log/shared/app.log" 
+0

這也是我所建議的,但是@RicardoBranco給了我以前不知道的一個有趣的解決方案..'--volumes-from' – ItayB

+1

很好!但請考慮[this](https://boxboat.com/2017/01/23/volumes-and-dockerfiles-dont-mix/) – Robert

+1

您也可以在Docker Compose中使用命名卷(甚至是'volumes_from')。我將'container_name'添加到上面的每個服務以避免'_1'後綴。 更多細節請參見:https://docs.docker.com/compose/compose-file/#volume-configuration-reference –