【问题标题】:Use data of docker container inside another在另一个容器中使用 docker 容器的数据
【发布时间】:2017-10-19 16:01:55
【问题描述】:

主要任务是执行到 docker 容器和尾部日志文件中。 这是在 python 项目中完成的,其中:

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

被执行,标准输出被传递给解析和做一些指标。

在我尝试将我的项目设置为 docker 容器之前工作得很好。

现在我无法执行到所需的容器中,而且我还没有找到访问 container_to_analysis 数据并在度量容器中使用它的方法。

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/log... 文件中的 container_to_analysis 日志暴露给我的指标容器,以便它可以使用它。

【问题讨论】:

  • 使用docker run -v my_dir_on_host:/var/log/xy.log...启动它?
  • 如何将日志文件从container_to_analyse 挂载到主机并将其挂载到metrics_container 内的某个位置?
  • 能否为两个容器添加run 命令? (或撰写文件)我会尽力帮助..
  • @user2915097 它只是使空目录不可读(不能跟随此类文件的结尾;放弃此名称)
  • @ItayB container_to_analysis docker run --privileged --cap-add=MKNOD --cap-add SYS_ADMIN --shm-size 1GB --device /dev/fuse -d --restart=always -p 8081:8081 -p 11112:11112 -p 11113:11113 --link {postgres_container}--volumes-from vdata --name {image} container_to_metrics docker run rtt_container

标签: python docker containers dockerfile docker-volume


【解决方案1】:

使用--volumes-from 选项(如--volumes-from container_to_analyse)并在Dockerfile 中声明/var/log/whatever 一个VOLUME。然后你可以访问metrics_container中的/var/log/whatever。

【讨论】:

  • 这么简单,但我错过了,谢谢!
【解决方案2】:

这是关于如何共享文件的一种方法的简单示例:

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,我更喜欢这种方法。

相同但没有 docker-compose:

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"

【讨论】:

  • 这也是我的建议,但@RicardoBranco 提供了一个我以前不知道的有趣解决方案。--volumes-from
  • 太好了!但是考虑this
  • 你也可以在 Docker Compose 中使用命名卷(甚至volumes_from)。我会在上面的每个服务中添加container_name 以避免_1 后缀。更多详情请见:docs.docker.com/compose/compose-file/…
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多