我的 postgresql docker 容器正在使用所有 ram 并且表现得很奇怪
My postgresql docker container is using all the ram and acting weird
我在 2GO digitalOcean 服务器上使用 docker compose 来部署我的应用程序,但我注意到 postgresql 容器正在使用他可用的所有 ram!
这是不正常的,我想知道如何解决这个问题..?
所以我进入容器的日志(docker logs postgres),我发现了这个:
postgresql container logs
我没想到 'database is ready to accept connections' 之后会有日志 日志就像我没有在容器中安装包一样,但我使用的是官方镜像所以我认为它应该可以工作...
帮你帮我哈哈:
我的docker-撰写文件:
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 统计数据的输出:
enter image description here
如果你有想法!提前致谢:)
我终于找到了解决办法,那是因为我的容器被泄露了!
事实上,我的 postgres 容器在 5432 上有一个开放端口到互联网,所以每个人都可以使用 digitalocean droplet ip 和端口 (:port) 连接到它,我认为有人在入侵我的容器并使用我所有的Ram/cpu允许容器!
我确信这个是因为要纠正这个问题,我通过使用 iptables 添加防火墙规则来阻止从我的 Droplet 外部访问容器(你应该在链 DOCKER-USER 中添加规则) ,并且由于我添加了规则,容器的 ram 消耗恢复正常,并且我不再有我在问题中发布的奇怪日志!
结论:当 Docker 容器在网络上 运行 时,请注意它们的安全!
谢谢希望对大家有帮助:)
我在 2GO digitalOcean 服务器上使用 docker compose 来部署我的应用程序,但我注意到 postgresql 容器正在使用他可用的所有 ram! 这是不正常的,我想知道如何解决这个问题..? 所以我进入容器的日志(docker logs postgres),我发现了这个:
postgresql container logs
我没想到 'database is ready to accept connections' 之后会有日志 日志就像我没有在容器中安装包一样,但我使用的是官方镜像所以我认为它应该可以工作...
帮你帮我哈哈:
我的docker-撰写文件:
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 统计数据的输出:
enter image description here
如果你有想法!提前致谢:)
我终于找到了解决办法,那是因为我的容器被泄露了!
事实上,我的 postgres 容器在 5432 上有一个开放端口到互联网,所以每个人都可以使用 digitalocean droplet ip 和端口 (:port) 连接到它,我认为有人在入侵我的容器并使用我所有的Ram/cpu允许容器!
我确信这个是因为要纠正这个问题,我通过使用 iptables 添加防火墙规则来阻止从我的 Droplet 外部访问容器(你应该在链 DOCKER-USER 中添加规则) ,并且由于我添加了规则,容器的 ram 消耗恢复正常,并且我不再有我在问题中发布的奇怪日志!
结论:当 Docker 容器在网络上 运行 时,请注意它们的安全!
谢谢希望对大家有帮助:)