docker - 我可以在启动 docker 会话后增加共享内存吗
问题描述
如果我已经运行了一个 docker 会话,有没有办法增加共享内存?
- 我知道我们可以
docker run -it --shm-size=13g dockertag /bin/bash
按照https://stackoverflow.com/a/35884597/3776827
或更改 docker-compose.yml 文件。
但是,如果我已经运行了一个 docker 会话,是否仍然可以这样做?(我有一个进程正在运行,不想停止它)
- 我把这个运行命令放在哪里?
docker build -f ./Dockerfile -t <tag> .
docker tag <tag> <repo>
docker push <repo>
如果我这样做docker run -it --shm-size=13g <tag> /bin/bash
,我会进入码头。在(退出泊坞窗)之后执行docker push
此操作不会产生任何效果。
我正在尝试解决 pytorch 上的这些错误:
请原谅我对 docker 的理解。我是它的新手。
解决方案
但是,如果我已经运行了一个 docker 会话,是否仍然可以这样做
答案是否定的 , 是的。
答案是肯定的,因为如果您在创建容器时创建了卷,这是可能的。然后您可以增加挂载的大小,/dev/shm
这些更改将反映在容器中而无需重新启动
为了演示,在下面的示例中/dev/shm
,我的机器安装/dev/shm
在容器中。
首先,让我们检查一下/dev/shm
我机器上的大小
anon@anon-VirtualBox:~$ df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
tmpfs 2.9G 48M 2.9G 2% /dev/shm
现在让我们创建一个 docker 容器/dev/shm
作为卷安装在容器中并检查容器的大小/dev/shm
创建容器:
anon@anon-VirtualBox: docker run -d -v /dev/shm:/dev/shm bash sleep 100000
bdc043c79cf8b1ba64ee8cfc026f8d62f0b609f63cbca3cae9f5d321fe47b0e0
检查容器中 /dev/shm 的大小:
anon@anon-VirtualBox: docker exec -it bdc043c df -h /dev/shm
Filesystem Size Used Available Use% Mounted on
tmpfs 2.9G 47.9M 2.8G 2% /dev/shm
您可以看到容器的大小与我的机器上的大小相匹配,从而验证我们已正确安装/dev/shm
到容器中。
现在我将增加/dev/shm
我机器上的大小
anon@anon-VirtualBox:~$ sudo mount -o remount,size=4G /dev/shm
anon@anon-VirtualBox:~$ df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
tmpfs 4.0G 56M 4.0G 2% /dev/shm
现在我们可以验证容器是否已调整(无需重新启动)
anon@anon-VirtualBox:~$ sudo docker exec -it bdc043c79cf8 df -h /dev/shm
Filesystem Size Used Available Use% Mounted on
tmpfs 4.0G 55.9M 3.9G 1% /dev/shm
答案是否定的,因为您已经创建了一个容器。/var/lib/docker/containers/<container_id>/hostconfig.json
可以通过调整来修改容器的配置ShmSize
,但这需要重新启动容器才能生效。那时,创建新容器和使用指定新大小没有区别docker run..
我把这个运行命令放在哪里?
docker build -f ./Dockerfile -t <tag> .
docker tag <tag> <repo>
docker push <repo>
docker build:这将构建 docker 映像
docker tag:给图像一个可选的标签(注意——这是多余的,因为你在前面的命令中指定了一个标签)
docker push:这会将图像推送到远程注册表(图像存储库,即https://hub.docker.com/)
这些步骤都是相互独立的,并在需要用于其目的时使用。标记图像是可选的,就像将图像推送到注册表是可选的一样。运行 docker 容器的唯一要求是存在运行容器的镜像,因此您在docker run
命令中指定镜像名称。因此,为了满足您的回答, docker run 命令将在您构建映像之后执行。值得注意的是,默认情况下,例如,当您运行时,docker run bash
它会在本地查找该图像,如果它不存在(默认情况下),它将尝试从 docker hub 中提取该图像,即https://hub.docker.com /_/bash . 这就是为什么您可以从全新安装的 docker 运行docker run bash
它无需先构建 bash 映像即可工作。您的输出看起来类似于
docker run bash
Unable to find image 'bash:latest' locally
latest: Pulling from library/bash
050382585609: Pull complete
7bf5420b55e6: Pull complete
1beb2aaf8cf9: Pull complete
Digest: sha256:845d500de4879819b189934ec07de15e8ff8de94b3fd16d2744cbe7eb5ca3323
Status: Downloaded newer image for bash:latest
e4c594907b986af923afe089bdbbac057712b3e27589d12618b3d568df21d533
推荐阅读
- nasm - 无法在 sasm 中打开包含文件“test.inc”
- swiftui - SwiftUI(homekit)addAndSetupAccessories - 如何区分弹出关闭与设备添加成功
- sql - SQL 帮助 - 检测指定值列表中的更改
- angular - 用原理图生成多个文件?
- f# - 如何使用 F# 解决 VS 2019 中未处理的错误
- flutter - Flutter - textField 在值更改时不会滚动到插入符号位置
- api - 如何使用使用自签名 SSL 的 API?
- android - 如何在 android volley 中添加用于授权的 API 密钥作为标头?
- c++ - 模板类型擦除
- mysql - 相同规格的 Amazon RDS 之间的单个 MySQL 数据库迁移