Docker容器部署应用操作用户时遇404,疑Redis连接异常
问题:Docker容器化应用修改用户时出现404错误
我在基于多Docker容器构建的应用中修改用户时,访问 http://localhost:4200/NowCEDevelop/user/find/8bae6be6cd7e44288251983fe97767d4 出现404错误,怀疑是无法连接容器内的Redis数据库,但找不到具体问题点。
容器运行信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ef575204dfc8 node:16.19-alpine "node ./app/app.js -…" 2 days ago Up 9 minutes 0.0.0.0:20000->13001/tcp server-node-service-1 47efad61a584 redis:4.0.11-alpine "docker-entrypoint.s…" 2 days ago Up 9 minutes 6379/tcp, 0.0.0.0:20001->26379/tcp server-node-redisdb-1
docker-compose.yml 配置
version: "2" services: redisdb: #name: nowce-developdb image: redis:4.0.11-alpine volumes: - ../database/redis/provider/${PROVIDER_ID}:/data ports: - "${REDIS_PORT}:26379" restart: unless-stopped service: image: node:16.19-alpine #restart: always working_dir: /home/node entrypoint: "node ./app/app.js --env production" mem_limit: "300M" memswap_limit: "1G" ports: - "${APP_PORT}:13001" volumes: - .:/home/node # modified here to take into account the new app path # - ./logs:/home/app/logs user: node links: - redisdb restart: unless-stopped environment: - NODE_ENV=production - AES=false - SERVICE_ROUTE=develop - PROVIDER_ID=${PROVIDER_ID} - PROVIDER_SUBDOMAIN=${PROVIDER_SUBDOMAIN} - PROVIDER_SUBDOMAIN_SUFFIX=${PROVIDER_SUBDOMAIN_SUFFIX} - ADMIN_USERNAME=${ADMIN_USERNAME} - ADMIN_EMAIL=${ADMIN_EMAIL} - ADMIN_PASSWORD=${ADMIN_PASSWORD} - PROVIDER_APIKEY=${PROVIDER_APIKEY} - INSTITUTION_CODE=${INSTITUTION_CODE} - CANDIDATE_URL=${CANDIDATE_URL} - CONTRIBUTOR_URL=${CONTRIBUTOR_URL}
排查方向建议
- 验证API路由映射:前端访问的是
localhost:4200,但Node服务暴露在localhost:20000,检查前端是否配置了正确的代理规则,确保请求能转发到Node容器的20000端口。 - 查看Node服务日志:进入Node容器查看请求日志,确认
/NowCEDevelop/user/find/:id接口是否存在,或者请求是否真的到达服务端。执行命令:docker logs -f server-node-service-1 - 测试Redis连接:进入Node容器,直接测试与Redis的连通性。执行命令:
docker exec -it server-node-service-1 sh # 安装redis-cli(容器内默认无此工具) apk add redis-cli # 通过Docker内部域名连接Redis容器 redis-cli -h redisdb -p 26379 # 执行PING命令,正常应返回PONG PING - 核对环境变量与路由前缀:确认
SERVICE_ROUTE=develop是否和前端请求的NowCEDevelop路径匹配,可能是路由前缀配置不一致导致接口找不到。 - 检查Redis数据存在性:如果Redis连接正常,进一步检查该用户ID对应的键值是否存在,排除数据丢失的可能。
内容的提问来源于stack exchange,提问作者Darren
相关产品推荐
相关产品推荐

