CareyWang / MyUrls

Your Own URL Shortener
MIT License
304 stars 126 forks source link

大大求救啊!!!docker使用时出现了无法连接redis的问题 #33

Closed TaoRone closed 8 months ago

TaoRone commented 11 months ago

两天了一直没解决这个问题……快崩溃了

问题描述: 后台curl -i http://s2*/short和curl -i http://127.0.0.1/short 均会在等待十几秒后返回 短链接不存在或已过期 redis中无新的key增加 docker logs myurls会提示

[GIN] 2023/07/23 - 03:57:52 | 200 |    1.277873ms |   194.29.187.* | GET      "/"
[GIN] 2023/07/23 - 03:58:14 | 200 | 30.015488771s |   194.29.187.* | POST     "/short"
[GIN] 2023/07/23 - 03:58:18 | 200 |     161.564µs |   194.29.187.* | GET      "/"
[GIN] 2023/07/23 - 03:58:26 | 200 | 30.003869954s |   194.29.187.* | POST     "/short"
[GIN] 2023/07/23 - 03:58:51 | 200 | 30.022925521s |   194.29.187.* | POST     "/short"
[GIN] 2023/07/23 - 04:05:18 | 404 | 30.029518236s |  95.214.1**.* | GET      "/short"
[GIN] 2023/07/23 - 04:06:00 | 404 | 30.029486231s |      172.22.0.1 | GET      "/short"

感觉哪里出了问题,myurls没能成功访问redis

补充一点,直接使用默认的docker compose也会有类似的问题……

配置如下:

env文件

MYURLS_PORT=9002
MYURLS_DOMAIN=*
MYURLS_TTL=180

index.html

const backend = 'https://*' 这里无论http还是https都会出现问题

docker compose 对这个配置稍微进行了修改 手动redis-cli -h 127.0.0.1 -p 9003访问redis正常

version: "3"
services:
  myurls:
    build: .
    container_name: myurls
    restart: always
    env_file: .env
    ports:
      - "${MYURLS_PORT}:8002"
    volumes:
      - ./data/myurls/logs:/app/logs
    depends_on:
      - myurls-redis
    entrypoint: ["/app/myurls", "-domain", "${MYURLS_DOMAIN}", "-conn", "myurls-redis:6379", "-passwd", "123123", "-ttl", "${MYURLS_TTL}"]
    command: redis-server --requirepass fdsaf342

  myurls-redis:
    image: "redis:6"
    container_name: myurls-redis
    restart: always
    volumes:
      - ./data/redis:/data
    expose:
      - "6379"
    ports:
      - 9003:6379
    command: redis-server --requirepass 123123

*

CareyWang commented 11 months ago

直接使用仓库提供的 docker-compose.yml 即可,无需修改;变量使用 .env 的方式传递

TaoRone commented 11 months ago

直接使用仓库提供的 docker-compose.yml 即可,无需修改;变量使用 .env 的方式传递

已尝试,依然均会在等待十几秒后返回 短链接不存在或已过期

TaoRone commented 11 months ago

报错Uncaught (in promise)

TaoRone commented 11 months ago

排查了很久,发现了一个一直忽视的细节,redis的docker日志里一直有这个报错

1:M 27 Jul 2023 13:43:27.602 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

是内存不够的原因么?

TaoRone commented 8 months ago

问题解决,手动给与755权限后,设置用户组为www:www就好了……我无语。。。。。

coulsontl commented 8 months ago

问题解决,手动给与755权限后,设置用户组为www:www就好了……我无语。。。。。

您好,遇到了相同的问题;你是给什么文件权限的?

TaoRone commented 8 months ago

问题解决,手动给与755权限后,设置用户组为www:www就好了……我无语。。。。。

您好,遇到了相同的问题;你是给什么文件权限的?

整个[MyUrls]目录