2017-05-19 283 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 –