我还在学习一些码头组成和码头集装箱的一般特点。我不清楚使用bind将主机文件夹映射到容器文件夹与使用卷的类似映射之间的区别。也不清楚这与宣布一卷书有什么关系。例如,我在我的docker-compose.yml文件中定义了相当多的容器,但是我开始使用这2来解决我的问题:
# MPPS testing server, DICOM
python_mpps:
build: python_mpps
image: sdscotti/python_mpps
depends_on: [mysql_db,pacs-1,pacs-2]
ports: ["104:11112"]
volumes:
- type: bind
source: ./python_mpps/scripts_log
target: /scripts
- type: bind
source: ./tls
target: /etc/python/tls
- type: volume
source: MWL
target: /MWL
volume:
nocopy: true
tty: true
# MWL server, REST API
python_mwl_api:
build: python_mwl_api
image: sdscotti/python_mwl_api
depends_on: [mysql_db,pacs-1,pacs-2]
ports: ["5000:5000"]
environment:
PORT: 5000
FLASK_DEBUG: 1
FLASK_ENV: development
volumes:
- type: bind
source: ./python_mpps/scripts_log
target: /scripts
- type: bind
source: ./tls
target: /etc/python/tls
- type: volume
source: MWL
target: /MWL
volume:
nocopy: true
tty: true
volumes:
MWL:我在Mac (Catalina)上使用Desktop,在LINUX上只使用CLI,但这与OS有关。如果我在两个容器中进入bash shell并检查/etc/python/tls中的内容,我会在./tls中看到主机上的内容,这就是我希望看到的(例如)。
docker exec -it 37fabd30c9afe6ca290a3e7f279a7a677061b0fbbc6277650d7055a285fb1ca4 /bin/sh
# cd /etc/python/tls
# ls
USAGE.md copy-tls-to-docker-volumes.sh nginx-crt.pem nginx.cnf
ca.cnf generate-tls.sh nginx-key.pem每个容器中的/scripts也是如此。按预期映射到主机,这里有在启动时启动的python脚本,也有一个日志文件。
# cd /scripts
# ls
mpps.log mpps.py
# 我应该说,这些脚本文件夹仅由该特定容器使用,不与其他容器共享,而主机上的./tls由许多容器读取,但根本没有写入。也就是说,只需将ssl、.crt和.key文件复制到服务器,因为这是一个通配符证书。
然后,如果我查看容器中的/MWL文件夹,就会看到我希望看到的:
# cd /MWL
# ls
test.wl
# 但我不知道在OS X上我的主机系统在哪里。我可以这样做:
docker volume inspect orthanc_docker_ris_MWL
[
{
"CreatedAt": "2021-07-06T21:08:20Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "orthanc_docker_ris",
"com.docker.compose.version": "1.29.2",
"com.docker.compose.volume": "MWL"
},
"Mountpoint": "/var/lib/docker/volumes/orthanc_docker_ris_MWL/_data",
"Name": "orthanc_docker_ris_MWL",
"Options": null,
"Scope": "local"
}
]可能就在这里某个地方:
/Users/xxxx/Library/Containers/com.docker.docker/Data/vms我想要做的是将卷映射到我的主机上一个容易访问的位置,比如在docker-come.yml文件的根目录中。使用bind实际上很好,但是我在编写一个由多个容器绑定的文件夹时遇到了问题。不确定这是与码头本身有关的限制,还是我的一个容器实际上是在对文件夹加锁。目标确实是拥有一个可以从多个容器读取和写入的共享绑定或挂载,而不是具有相同功能的卷,但我希望将卷映射到所描述的文件夹中。
我确实有两个"Orthanc PACS“实例也在运行,我尝试让它们也使用该卷,看起来是这样的,因为Docker Desktop总共显示了4个绑定的容器,上面的两个或其他两个容器。
orthanc_docker_ris_MWL
In use by 4 containers
CREATED
38 minutes ago这是我实际上想要的,但我必须看看是否可以从多个容器中写入卷,然后理想地将它放在我的坞-复合文件的根部,而不是以我不知道的格式在我的系统中某个不知名的位置。
还可以提到,在OS X上安装程序很少有其他问题,因为一些容器(即使用php的nginx使用监督器)需要很长时间才能启动(可能需要几分钟,不过在此之后可以正常工作),还有这样的问题:
global.stat permission issue在其他地方提到过。这也发生在LINUX上,看起来有很多人都有这个问题。
我认为用于OS的Desktop并不是太糟糕,但是使用LINUX主机要好得多。我在LINUX上的NGINX容器立即启动,因此它必须与主机文件系统管理器有关。
注:
如果我从一个卷更改为一个绑定,并删除该卷,它就像我想要的那样设置好了,但是我必须测试一个以上的容器是否可以写入它。我怀疑可能是PACS以某种方式锁定了文件夹。
- type: bind
source: ./MWL
target: /MWL发布于 2021-07-07 07:04:06
Desktop for Mac在Linux虚拟机中运行dockerd。
一个“卷”由dockerd创建并存储在Linux虚拟机上。无法从macos直接访问该卷。
可以通过运行VM名称空间中的容器来访问/var/lib/docker/volumes/orthanc_docker_ris_MWL/_data路径:
$ docker run -it --rm --privileged --pid=host debian nsenter -t1 -m -u -i -n bash
container$ ls -1 /var/lib/docker/volumes/
01143a5cc5474d5052e2bf2ad187e42c419dc8082c8fb6d8bdf705ea94ea4fe1
5754aad4021c67741b589b90bcc3d532a87b619aabb130c1b61dca0f3cf8f0a0
e1372a62523b8667b59fbae31aeda3837e4036c8ea92a6dd7205a22a755e27ab
metadata.db
mongo-data
srv.sqlite在Desktop中的“绑定”安装是一个特殊情况。常规绑定挂载接受一个现有目录并将其映射到容器中。
Desktop使用一些魔法来“绑定”本地mac目录> Linux虚拟机>容器。神奇的是一个用户空间grpc插件,它让VM/Container看到mac目录。这总是比卷或普通Linux主机绑定挂载慢,特别是当这种性能是基于Linux文件缓存时,当从mac端进行更改时,这种缓存不能被大量使用。
https://stackoverflow.com/questions/68277663
复制相似问题