0

我在 2GO digitalOcean 服务器上使用 docker compose 来部署我的应用程序,但我注意到 postgresql 容器正在使用他可用的所有 ram!这是不正常的,我想知道如何解决这个问题..?所以我进入容器的日志(docker logs postgres),我发现了这个:

postgresql 容器日志

我没想到在“数据库准备好接受连接”之后会有日志,就像我没有在容器中安装软件包一样,但我使用的是官方图像,所以我认为它应该可以工作......

帮你帮我哈哈:

我的码头工人撰写文件:

version: "3"
services: 
    monapp:
        image: registry.gitlab.com/touretchar/workhouse-api-bdd/master:latest
        container_name: monapp
        depends_on: 
            - postgres
        ports:
            - "3000:3000"
        command: "npm run builded-test"
        restart: always
        deploy:
            resources:
                limits:
                    cpus: 0.25
                    memory: 500M
                reservations:
                    memory: 150M
    postgres:
        image: postgres:13.1
        container_name: postgres
        environment:
            - POSTGRES_HOST_AUTH_METHOD=trust
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
        volumes: 
            - postgres_datas:/var/lib/postgresql/data/
            - postgres_dumps:/home/dumps/test
        ports:
            - "5432:5432"
        restart: always
        deploy:
            resources:
                limits:
                    cpus: 0.25
                    memory: 500M
                reservations:
                    memory: 150M


volumes:
  postgres_datas:
    driver: local
    driver_opts:
      type: none
      device: $PWD/util/databases/pgDatas
      o: bind
  
  postgres_dumps:
    driver: local
    driver_opts:
      type: none
      device: $PWD/util/databases/test
      o: bind

以及那里的 docker stats 输出:

在此处输入图像描述

如果你有想法!提前感谢:)

4

1 回答 1

2

我终于找到了解决办法,那是因为我的容器被入侵了!

事实上,我的带有 postgres 的容器在 5432 上有一个开放的端口连接到互联网,所以每个人都可以使用 digitalocean droplet ip 和端口(:port)连接到它,我认为有人在入侵我的容器并使用我所有的 Ram/cpu 允许容器!

我确信这是为了纠正问题,我通过添加带有 iptables 的防火墙规则(您应该在链 DOCKER-USER 中添加规则)阻止了从我的 droplet 外部对容器的访问,并且由于我添加了规则,ram容器的消耗恢复正常,我不再有我在问题中发布的奇怪日志了!

结论:当你的 Docker 容器在 web 上运行时要小心它们的安全性!

谢谢希望它可以帮助某人:)

于 2021-02-12T17:16:32.237 回答