如何从日志中删除带有服务名称的前缀?

El *_*uso 7 docker docker-compose

docker-composeservice_1 |在每一行输出的开头插入前缀。我使用这个容器进行测试,这种改进(在其他情况下非常有用)弄乱了我的调试日志,我想为此服务删除它。文档没有关于这个问题的信息。有任何想法吗?
我的docker-compose.yml

version: '3'
services:
  rds:
    image: postgres:9.4
    ports:
      - ${POSTGRES_PORT}:5432
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  dynamo:
    image: iarruss/dynamo-local-admin:latest
    ports:
      - ${DYNAMODB_PORT}:8000
  python:
    container_name: python
    image: iarruss/docker-python2:latest
    depends_on:
      - rds
      - dynamo
    environment:
      POSTGRES_HOST: rds
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      DYNAMODB_HOST: dynamo
Run Code Online (Sandbox Code Playgroud)

编辑:澄清预期结果

电流输出:

python             |
python             | collected 511 items
python             |
python             | tests/test_access.py
python             |
Run Code Online (Sandbox Code Playgroud)

预期输出:

collected 511 items

test_access.py                                                     
Run Code Online (Sandbox Code Playgroud)

dav*_*wil 12

docker compose logs有一个--no-log-prefix删除前缀的标志。

例如

# start all services in background
docker compose up -d

# show logs for all services, without prefix (-f means follow the logs)
docker compose logs -f --no-log-prefix

# or, for a single service called foo
docker compose up foo -d
docker compose logs foo -f --no-log-prefix
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档

  • 对我有用,不需要 sed 魔法,很好的答案!我发现日志文档页面中缺少此选项很奇怪 https://docs.docker.com/compose/reference/logs/ (2认同)

Kad*_*nes 6

在 Unix shell 中,您可以使用管道 (|):

docker-compose up python | sed -u 's/^[^|]*[^ ]* //'
Run Code Online (Sandbox Code Playgroud)

这些[^|]*均值匹配除 | 之外的所有内容,因此在您的示例中它将匹配 python 和所有空格,直到第一个 |。

[^ ]*上面类似,只是它匹配所有非空格的内容。这是必要的,因为 docker-compose 之后不仅有一个空格|,还添加了一些控制字符来对输出进行着色。

在此之后有一个空格,实际上可以删除之后的空格|

的第一个斜杠//确定第一个正则表达式的结尾。在这些斜杠内,您可以放置​​一些内容来替换匹配的内容,在本例中,它是空的。

当您使用其他一些工具(例如foreman )-u来管理流程时,该选项是必需的。