【问题标题】:Changing shared memory size in docker compose在 docker compose 中更改共享内存大小
【发布时间】:2020-03-16 01:27:26
【问题描述】:

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

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

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

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

澄清一下,它不是处于构建状态,而是真正处于“运行”状态。

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

设置:

  • 具有 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

任何帮助表示赞赏:)

【问题讨论】:

    标签: docker docker-compose shared-memory docker-swarm


    【解决方案1】:

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

    SHM_SIZE

    以 3.5 版文件格式添加

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

    build:
      context: .
      shm_size: '2gb'
    

    compose-file-SHM_SIZE

    这里是测试

    version: '3.7'
    services:
      your_service:
        image: alpine
        command: ash -c "sleep 2 && df /dev/shm"
        shm_size: 2gb
    

    【讨论】:

    • 谢谢!我看到那行得通。我看到我从未提及它,但我正在使用 docker stack deploy 来部署它。在那里它说它被忽略了。我在文档中找不到任何提到它像其他选项一样被忽略的内容。我错了还是应该只在 docker stack deploy 中工作?
    • 哦,那是 docker swarm 的问题,根据这个问题,github.com/moby/moby/issues/26714 swarm 不支持。但您可以检查解决方法。传递它的构建时间
    • 我明白了,谢谢!解决方法似乎仅适用于构建,而不适用于运行...
    • 哈哈不,我在运行部分需要它。找到了解决方法:```volumes: - type: tmpfs target: /dev/shm tmpfs: size: 16000000000 #~ 16gb ```
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2022-12-05
    相关资源
    最近更新 更多