在 docker compose 中更改共享内存大小

seb*_*ter 8 shared-memory docker docker-compose docker-swarm

我目前在我的一个容器中的共享内存存在一些问题。

我有一个 docker-compose 文件,我希望能够在其中设置大小。我基本上转换了一个旧的 docker run,它有一个--shm-size 16gb. 我想这就像shm_size:16gb在撰写文件中添加到我的服务一样简单。

添加它只会给我信息:Ignoring unsupported options: shm_size

我确实检查了文档,但它并没有真正帮助我。

只是为了澄清,它不在构建中,而是真正用于“运行”状态。

你们中的一个人有没有遇到过这个问题/知道如何解决它?

设置:

  • 具有 7 个节点的 docker swarm
  • 服务应仅在单个节点上运行
  • 仅运行堆栈
  • 64 GB RAM 主机
  • 32 GB shm(主机)
  • Docker 版本 18.09.7,构建 2d0083d
  • 在我的撰写文件中使用 v 3.7

编写文件:

version: "3.7"
services:
  server:
    shm_size: 16GB # <<<<<<< This fails
    image: local_repo/my_app:v1-dev
    command: run
    environment:
      - UPDATES=enabled
    volumes:
      - type: volume
        source: data
        target: /var/lib/my_app/
      - type: volume
        source: db
        target: /var/lib/postgresql/10/main
    networks:
      - xxx_traefik
    deploy:
     mode: replicated
     labels:
        - traefik.docker.network=xxx_traefik
        - traefik.enable=true
        - traefik.port=80
        - traefik.frontend.rule=Host:my_container.xxx.com
        - traefik.backend.loadbalancer.stickiness=true
        - traefik.protocol=http
     replicas: 1
     placement:
       constraints:
         - node.hostname==node2

volumes:
  db:
   external: true
  data:
   external: true
networks:
  xxx_traefik:
    external: true
# shm_size: 16GB  <<<<<<< Also tried to put it here since documentation doesn't show indents
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏:)

Adi*_*iii 12

它应该低于服务,我可以验证它,但这是官方文档所说的

SHM_SIZE

以 3.5 版文件格式添加

为此构建的容器设置 /dev/shm 分区的大小。指定为表示字节数的整数值或表示字节值的字符串。

build:
  context: .
  shm_size: '2gb'
Run Code Online (Sandbox Code Playgroud)

撰写文件-SHM_SIZE

这是测试

version: '3.7'
services:
  your_service:
    image: alpine
    command: ash -c "sleep 2 && df /dev/shm"
    shm_size: 2gb
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 哈哈,不,我需要它来运行部分。找到了一个解决方案: ``` Volumes: - type: tmpfs target: /dev/shm tmpfs: size: 16000000000 #~ 16gb ``` (2认同)