Docker组成不显示控制台输出的链接

docker-compose up没有显示我所有服务的日志输出(stdout)。

我手动运行容器时得到输出:

 $ docker run -it simple/cra-products /usr/local/bin/cra-products [Info#INIT] cra-products [Info#CONFIG] loadConfig ... 

但是当我用docker-compose运行它时,输出停止在附加。

 $ docker-compose up cra-products underwriting_cra-products_1 is up-to-date Attaching to underwriting_cra-products_1 

我已经validation它已经打开,正在运行(我的其他服务可以连接到它)。 我只是看不到日志输出。

日志输出可以为另一个容器工作。

 $ docker-compose up underwriting underwriting_cra-products_1 is up-to-date Starting underwriting_underwriting_1 Attaching to underwriting_underwriting_1 underwriting_1 | HELLO ... 

我究竟做错了什么? 我想查看所有容器的日志。

调用docker-compose stopdocker-compose rm并重新启动不会修复它。 docker-compose logs也不会使用docker-compose up -d 。 仍然没有产品的产品。

这是docker-compose文件:

 version: "3" services: underwriting: image: simple/underwriting command: /usr/local/bin/underwriting links: - cra-products ports: - "8011:8011" environment: - UNDERWRITING_PORT=8081 - CRA_PRODUCTS_ENDPOINT=http://cra-products:8081 cra-products: image: simple/cra-products:latest command: /usr/local/bin/cra-products ports: - "8081:8081" environment: - CRA_PRODUCTS_PORT=8081 

设置服务以逐行缓冲stdout解决了问题。

通过链接连接服务现在已经被弃用,在Docker的文档中可以看到: https : //docs.docker.com/compose/link-env-deprecated/

正如文中提到的那样:

相反,您应该使用链接名称(默认情况下为链接服务的名称)作为要连接的主机名称。

为了快速说明这一点,我把jadametz/dpat (它只是返回主机名)和nginx:stable-alpine这个简单的例子。

 version: '3' services: dpat: image: jadametz/dpat ports: - 8081:80 nginx: image: nginx:stable-alpine ports: - 8082:80 

现在,从nginx容器内(并在安装curl之后),您可以看到只需引用其他服务,就可以获得响应。

 [04:24 PM]~/projects ➭ docker exec -it desktop_nginx_1 ash / # curl http://dpat { "node": "809250c001c8" } 

所以对于你docker-compose.yml文件,你可能只需要简单的下面几行:

 version: "3" services: underwriting: image: simple/underwriting command: /usr/local/bin/underwriting ports: - "8011:8011" cra-products: image: simple/cra-products:latest command: /usr/local/bin/cra-products ports: - "8081:8081"