Python 在另一个容器中使用docker容器的数据
主要任务是执行docker容器和尾部日志文件。 这是在python项目中完成的,其中:Python 在另一个容器中使用docker容器的数据,python,docker,containers,dockerfile,docker-volume,Python,Docker,Containers,Dockerfile,Docker Volume,主要任务是执行docker容器和尾部日志文件。 这是在python项目中完成的,其中: docker exec container_to_analyse tail -f /var/log...xy.log 执行,并将stdout传递给解析和执行一些度量 在我尝试将我的项目设置到docker容器之前,它工作得非常好 现在我无法执行到所需的容器中,而且我还没有找到一种方法来访问容器以分析数据并在度量容器中使用它 Dockerfile: FROM python:2.7 ENV PYTHONUNBUF
docker exec container_to_analyse tail -f /var/log...xy.log
执行,并将stdout传递给解析和执行一些度量
在我尝试将我的项目设置到docker容器之前,它工作得非常好
现在我无法执行到所需的容器中,而且我还没有找到一种方法来访问容器以分析数据并在度量容器中使用它
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中的日志。。。使用
--volumes from
选项(如--volumes from container\u to\u analysis
)并在Dockerfile中声明/var/log/任何卷。然后,您可以访问metrics_容器中的/var/log/任何内容。使用--volumes from
选项(如--volumes from container_to_analysis
)并在Dockerfile中声明/var/log/任何内容。然后您可以访问metrics_容器中的/var/log/任何内容。这是一个关于如何共享文件的简单示例:
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
我更喜欢这种方法
相同但没有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"
这是如何共享文件的一种方法的简单示例:
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
我更喜欢这种方法
相同但没有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"
使用主机上的docker run-v my_dir_:/var/log/xy.log…启动它?如何将日志文件从
容器装载到主机上,然后装载到度量容器中的某个位置?
?能否为这两个容器添加run
命令?(或编写文件)我将尝试帮助..@user2915097它只会生成无法读取的空目录(无法跟随此类型文件的结尾;放弃此名称)@ItayB container_to_-analysisdocker run--privileged--cap add=MKNOD--cap add SYS_ADMIN--shm size 1GB--device/dev/fuse-d--restart=always-p8081:8081-p11112:11112-p11113:11113--link{postgres container}--vdata name{image}
container\u to\u metricsdocker run rtt\u container
在主机上使用docker run-v my\u dir\u:/var/log/xy.log…
?如何将日志文件从container\u装载到主机,并将其装载到metrics\u container
内的某个位置?能否为两个容器添加run
命令?(或编写文件)我将尝试帮助..@user2915097它只会生成无法读取的空目录(无法跟随此类型文件的结尾;放弃此名称)@ItayB container_to_-analysisdocker run--privileged--cap add=MKNOD--cap add SYS_ADMIN--shm size 1GB--device/dev/fuse-d--restart=always-p8081:8081-p11112:11112-p11113:11113--link{postgres container}--vdata name{image}
container\u to\u metricsdocker run rtt\u container
这也是我的建议,但是@RicardoBranco给出了一个有趣的解决方案,我以前不知道<代码>--来自
的卷太好了!但是你也可以在DokeCeopy中使用命名卷(甚至<代码> VuluSeMe< < /C> >)。我会在上面的每个服务中添加container\u name
,以避免使用\u 1
后缀。更多细节:这也是我的建议,但@RicardoBranco给出了一个有趣的解决方案,我以前不知道<代码>--来自
的卷太好了!但是你也可以在DokeCeopy中使用命名卷(甚至<代码> VuluSeMe< < /C> >)。我会在上面的每个服务中添加container\u name
,以避免使用\u 1
后缀。更多细节:这么简单,但我错过了,谢谢!很简单,但我错过了,谢谢!