我得到了这个docker-compose文件
version: "3.3"
services:
api:
restart: always
build:
context: .
image: foo-platform:1.0.0.0
env_file: docker-compose-test.env
environment:
SERVICES: api,$node,foo-service
labels:
- "traefik.enable=false"
- "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
- "traefik.http.services.api-gw.loadbalancer.server.port=8090"
networks:
- internal
volumes:
- logdata:/logs/moleculer
ports:
- "5680:5680"
- "5683:5683"
- "5684:5684"
- "5685:5685"
- "5686:5686"
networks:
internal:
volumes:
logdata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/var/log/tdcp'
我得到了这个moleculer文件配置:
const brokerConfig: BrokerOptions = {
// Namespace of nodes to segment your nodes on the same network.
namespace: process.env.NAMESPACE,
// Unique node identifier. Must be unique in a namespace.
nodeID: null,
// Custom metadata store. Store here what you want. Accessing: `this.broker.metadata`
metadata: {},
// Enable/disable logging or use custom logger. More info: https://moleculer.services/docs/0.14/logging.html
// Available logger types: "Console", "File", "Pino", "Winston", "Bunyan", "debug", "Log4js", "Datadog"
logger: [
//{
// type: "Console",
// options: {
// level: "info",
// }
//},
{
type: "File",
options: {
level: "info",
folder: "/logs/moleculer",
filename: "log-{date}.log",
formatter: "{timestamp} {level} {nodeID}/{mod}: {msg}"
}
},
],
...
当我用可视化代码或直接在系统中使用node启动moleculer runner时,“this.logger”对象工作得很好,它不使用控制台日志,只使用文件日志。但是当我在docker中使用这个对象时,当我的配置文件说要执行wat控制台时,进程使用控制台日志,并且在docker执行中没有文件写入。
这是我的Dockfile。
Moleculer文件的其余属性工作得很完美(是的,应用程序使用了那个Moleculer配置文件)。
FROM node:lts-alpine
# Working directory
WORKDIR /app
# Install dependencies
COPY package.json package-lock.json ./
RUN npm ci --silent
# Copy source
COPY . .
# Build and cleanup
ENV NODE_ENV=production
RUN npm run build \
&& npm prune \
&& mkdir -p /logs/moleculer \
&& touch /logs/moleculer/this_is_a_volumen
# Start server
CMD ["node", "./node_modules/moleculer/bin/moleculer-runner.js"]
2条答案
按热度按时间avwztpqn1#
这个问题我已经纠结了几个小时了,即使这个问题很老,我也没有找到一个足够完整的答案。正如ZhuRong所说,您将环境变量LOGGER设置为某个值,可能是真的。简短的答案是,删除
docker-compose.env
中的这几行moleculer init命令默认生成docker文件,其中有一个带有环境变量
docker-compose.env
的文件,该文件在docker-compose.yml
文件中引用。在生成的env文件中,环境变量LOGGER默认设置为true。这使得moleculer contanters使用docker内部日志记录器,并停用代理在moleculer-config.js
中设置的任何日志记录器。请记住,这些文件将在container中生成。正如您所做的那样,您必须配置一个docker卷来将更改保存在服务容器之外。
2mbi3lxu2#
尝试检查环境变量LOGGER。如果您将LOGGER设置为其他值,例如true,它将覆盖moleculer.config.js文件中的logger值。