【发布时间】:2019-08-13 23:56:08
【问题描述】:
问题
我在开发时运行docker-compose up,所以我只需要快速查看终端(使用集成的 vs 代码终端),看看我的单元测试、lint 作业和任何运行是否正常。
如果我想console.log API 中的某些内容也是如此,它只是弹出在终端中,我可以从中进行调试。
但是,从今天下午开始,我不再拥有来自所有容器的日志,而是拥有来自容器 transpiler、kibana 和 apm-server 的日志。
我想解决什么问题
我习惯用 ctrl+s 来触发 linter 和 mocha 容器(因为这两个容器都使用 nodemon 所以修改文件会使它们输出),并将 typescripts 文件构建到 js 中(监视模式下的编译器)和让他们将所有内容输出到终端。
api、mocha 和 linter 没有输出,即使我在代码中添加了一些 console.log...
我没有做任何重大更新,只是换了电脑(都是安装了 docker 的 ubuntu linux),我不知道如何解决这个问题
docker-compose.yml 文件
version: "3.3"
services:
api:
container_name: api
build: .
env_file:
- .env
volumes:
- .:/app
- /app/node_modules
ports:
- 9000:9000
restart: always
depends_on:
- mongo
- elasticsearch
command: sh -c "mkdir -p dist && touch ./dist/app.js && yarn run start"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/api/v1/ping"]
interval: 1m30s
timeout: 10s
retries: 3
transpiler:
container_name: transpiler
build: .
restart: always
volumes:
- .:/app
- /app/node_modules
command: yarn run transpile -w
linter:
container_name: linter
build: .
restart: always
volumes:
- .:/app
- /app/node_modules
# https://github.com/yarnpkg/yarn/issues/5457 --silent not working
command: nodemon --delay 500ms --exec yarn run lint
mongo:
container_name: mongo
image: mongo:4.0
restart: always
ports:
- 27017:27017
command: mongod
volumes:
- ./db/mongodb:/data/db
mongo_express:
container_name: mongo_express
restart: always
image: mongo-express
ports:
- 8081:8081
depends_on:
- mongo
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081"]
interval: 2m30s
timeout: 10s
retries: 3
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
container_name: elasticsearch
restart: always
volumes:
- ./db/elasticsearch:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- discovery.type=single-node
ports:
- 9300:9300
- 9200:9200
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 1m30s
timeout: 10s
retries: 3
kibana:
container_name: kibana
restart: always
image: docker.elastic.co/kibana/kibana:6.6.0
ports:
- 5601:5601
depends_on:
- elasticsearch
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5601"]
interval: 1m30s
timeout: 10s
retries: 3
logstash:
container_name: logstash
restart: always
image: docker.elastic.co/logstash/logstash:6.6.0
ports:
- 9600:9600
environment:
- KILL_ON_STOP_TIMEOUT=1
volumes:
- ./logstash/settings/:/usr/share/logstash/config/
- ./logstash/pipeline/:/usr/share/logstash/pipeline/
depends_on:
- elasticsearch
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9600"]
interval: 1m30s
timeout: 10s
retries: 3
apm-server:
container_name: apm_server
restart: always
image: docker.elastic.co/apm/apm-server:6.6.0
ports:
- 8200:8200
volumes:
- ./apm_settings/apm-server.yml:/usr/share/apm-server/apm-server.yml
depends_on:
- elasticsearch
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8200"]
interval: 1m30s
timeout: 10s
retries: 3
mocha:
container_name: mocha
restart: always
build: .
volumes:
- .:/app
- /app/node_modules
command: nodemon --delay 500ms --exec yarn run test-coverage
env_file:
- .env
environment:
NODE_ENV: 'test'
volumes:
esdata:
Dockerfile
FROM mhart/alpine-node:10
ADD . /app
WORKDIR /app
RUN apk add --no-cache --virtual .gyp g++ libtool make python curl &&\
yarn &&\
yarn global add nodemon &&\
apk del .gyp
数据样本
当我运行 docker-up 时,所有输出都很好:
mongo | 2019-03-22T23:11:26.048+0000 I NETWORK [conn6] end connection 172.22.0.8:52266 (3 connections now open)
apm_server | 2019-03-22T23:11:26.048Z INFO [request] beater/v2_handler.go:96 error handling request {"request_id": "77b88109-c7c0-41a2-a28c-2343a82862bd", "method": "POST", "URL": "/intake/v2/events", "content_length": -1, "remote_address": "172.22.0.8", "user-agent": "elastic-apm-node/2.6.0 elastic-apm-http-client/7.1.1", "error": "unexpected EOF"}
api | [nodemon] app crashed
api | error Command failed with exit code 1.
api | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
mocha |
mocha |
mocha | Express server listening on port 9000, in test mode
mocha | GET PING ressource
mocha | GET /api/v1/ ping/
mongo | 2019-03-22T23:11:27.951+0000 I NETWORK [listener] connection accepted from 172.22.0.2:39956 #8 (4 connections now open)
mongo | 2019-03-22T23:11:27.961+0000 I NETWORK [conn8] received client metadata from 172.22.0.2:39956 conn8: { driver: { name: "nodejs", version: "3.1.13" }, os: { type: "Linux", name: "linux", architecture: "x64", version: "4.20.7-042007-generic" }, platform: "Node.js v10.15.3, LE, mongodb-core: 3.1.11" }
mongo | 2019-03-22T23:11:28.051+0000 I NETWORK [listener] connection accepted from 172.22.0.2:39958 #9 (5 connections now open)
mongo | 2019-03-22T23:11:28.197+0000 I NETWORK [listener] connection accepted from 172.22.0.2:39962 #10 (6 connections now open)
mocha | ✓ ping api (154ms)
是的,我确实知道这些日志显示了一些错误,但我主要关心的是仍然将它们输出到终端中
但是执行 ctrl+s 只会显示这一点:(这是我真正的问题):
[10:59:15 PM] File change detected. Starting incremental compilation...
transpiler |
transpiler | [10:59:15 PM] Found 0 errors. Watching for file changes.
transpiler |
apm_server | 2019-03-22T22:59:40.309Z INFO [request] beater/common_handlers.go:272 handled request {"request_id": "5948c9ee-c6fd-42ad-bd1e-acc259e1634c", "method": "POST", "URL": "/intake/v2/events", "content_length": -1, "remote_address": "172.22.0.11", "user-agent": "elastic-apm-node/2.6.0 elastic-apm-http-client/7.1.1", "response_code": 202}
kibana | {"type":"response","@timestamp":"2019-03-22T22:59:44Z","tags":[],"pid":1,"method":"get","statusCode":302,"req":{"url":"/","method":"get","headers":{"user-agent":"curl/7.29.0","host":"localhost:5601","accept":"*/*"},"remoteAddress":"127.0.0.1","userAgent":"127.0.0.1"},"res":{"statusCode":302,"responseTime":7,"contentLength":9},"message":"GET / 302 7ms - 9.0B"}
我尝试过的(但没有奏效)
- 删除所有容器
- 删除所有容器及其卷
- 删除所有容器及其卷和所有图像
- 正在重新启动
- 删除所有内容后重建 (
docker-compose build) - 从一个简单的终端运行
docker-compose upcmd,以确保它不是与 vs code 集成终端的问题 - 重启 docker 服务 (
sudo systemctl restart docker)
【问题讨论】:
-
当您重建所有内容时,很可能在某处的 npm 包中发生了某些更改(可能是您不知道的依赖项),您说您切换了计算机,它在以前的计算机和操作系统上是否仍能按预期工作
-
无法检查另一台计算机,它正在工作。但是我怀疑它来自 npm 包,原因有两个:首先我有一个 yarn.lock 文件,其次我没有合并我所做的修改,并尝试克隆 master 并从中重新启动,但同样的问题
-
当您说 diff 计算机但两者都是 Linux 时......它们是否相同版本(Ubuntu?16 18 ?Centos 6 7?
-
Ubuntu,一个 16.04 和另一个 18.04,但实际上你是对的,我只是再次尝试使用 master 的 yarn.lock,现在它工作正常。我猜我从 master 克隆时忘记构建,现在将尝试缩小导致问题的数据包(现在我想起来了,我在工作中做了一个
yarn upgrade但没有重建,所以问题可能来自这个升级)。如果您想发布答案,我会接受,因为您解决了我的问题:) -
很高兴听到你找到了问题????
标签: node.js docker express docker-compose mocha.js