我只是检查了我的/ var/lib/docker/volumes文件夹,发现它正在破坏名为Docker UUID的文件夹,每个文件夹都包含一个config.json文件,其中的内容沿着
{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}
Run Code Online (Sandbox Code Playgroud)
哪里
/path/to/mounted/volume
Run Code Online (Sandbox Code Playgroud)
是主机上的文件夹的路径,该文件夹在某个时刻使用-v开关安装到docker容器上.我有这样的文件夹可以追溯到我使用Docker进行实验的开始,即大约3周前.
有问题的容器很久以前就被停了下来,并且很久以前就停泊了这些容器,所以我看不出那些条目没有超过他们的销售日期.这引出了一个问题 - 剩下的就是我看到了一个错误,还是需要从/ var/lib/docker/volumes手动丢弃这些条目?
我是K8S的新手。我有一个yaml文件,该文件生成安装在投影卷上的kubernetes机密。执行后,我发现秘密文件(与秘密一起打包)将“ root”显示为文件所有者和组所有者。我想将文件所有者和组所有者更改为同一特定用户(例如450)。
我曾尝试从初始化容器中使用“ chown”(尝试过但失败了),但出现错误,提示“只读文件系统”,并且无法修改文件和组所有者。我不想在securitycontext下使用“ fsGroup”。我观察到使用fsGroup时,“ items”下的“ mode:”选项的行为无法预测。
有什么方法可以修改通过计划卷安装的kubernetes秘密文件的默认文件和组所有者吗?
我在下面提供示例代码。假设我想在以下示例中更改“密码”文件(在“ mysecret2”下)的文件和组所有者。如何实现呢?
apiVersion: v1
kind: Pod
metadata:
name: volume-test
spec:
containers:
- name: container-test
image: busybox
volumeMounts:
- name: all-in-one
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: mysecret
items:
- key: username
path: username
- secret:
name: mysecret2
items:
- key: password
path: password
mode: 511
Run Code Online (Sandbox Code Playgroud) 我的 Pod 声明了两个不同的卷。
我使用一些定义模板,并且根据某些情况的环境,我想对两个卷重复使用相同的声明。
这会导致错误:
Unable to mount volumes for pod "task-pv-pod_<...>": timeout expired waiting for volumes to attach/mount for pod "<...>"/"task-pv-pod". list of unattached/unmounted volumes=[task-pv-storage1]
Run Code Online (Sandbox Code Playgroud)
这是一个简化的 pod 定义:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage1
persistentVolumeClaim:
claimName: task-pv-claim
- name: task-pv-storage2
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage1
- mountPath: "/usr/share/nginx/something-else"
name: task-pv-storage2
Run Code Online (Sandbox Code Playgroud)
那么为什么它不起作用呢?
mount kubernetes mounted-volumes persistent-volumes persistent-volume-claims
我有以下 docker 命令
docker run -v //c/data:/data/db mongo
Run Code Online (Sandbox Code Playgroud)
我从 docker / mongo 得到以下错误响应
MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=8706cbf1b78f
db version v3.4.2
git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
allocator: tcmalloc
modules: none
build environment:
distmod: debian81
distarch: x86_64
target_arch: x86_64
options: {}
wiredtiger_open config: create,cache_size=478M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
WiredTiger error (1) [1489982988:687653][1:0x7fec9df0ccc0], connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
Assertion: 28595:1: Operation not permitted src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
exception in initAndListen: 28595 1: Operation not permitted, terminating
shutdown: going …Run Code Online (Sandbox Code Playgroud) 遵循以下步骤:
定义 Dockerfile:
FROM node:alpine
RUN yarn global add @angular/cli
RUN yarn global add node-sass
RUN mkdir /volumes
WORKDIR /volumes
EXPOSE 4200
ENTRYPOINT ["ng"]
Run Code Online (Sandbox Code Playgroud)从这个 Dockerfile 构建一个镜像:
docker build -t my_angular_image .
Run Code Online (Sandbox Code Playgroud)使用图像创建一个新的 angular 应用程序:
// Create the new app
docker run --rm --mount type=bind,src=$PWD,dst=/volumes my_angular_image new my-app --directory app --style scss
// Change ownership of the generated app
sudo chown -R $USER:$USER .
Run Code Online (Sandbox Code Playgroud)根据镜像,运行一个容器绑定挂载应用程序卷:
docker run -p 4200:4200 --mount type=bind,src=$PWD/app,dst=/volumes my_angular_image serve --host 0.0.0.0
Run Code Online (Sandbox Code Playgroud)结果:
第一次编译按预期工作,容器为应用程序提供服务。但是,当更改必须ng serve在容器中监视的文件的值(来自主机)时,不会触发新的角度构建(因此,不会更新服务的应用程序)。 …
我有一个在文件 io 方面非常密集的构建。它涉及 70k 个松散文件以及相当数量的压缩/解压缩。
当使用主机卷挂载在 Docker Desktop 2.2+ 容器内运行时,此构建的性能会直线下降。
12 分钟 - 直接 Windows 10
19 分钟 - Docker Desktop 2.1.0.5 针对主机安装的卷(Windows /c 驱动器)
71 分钟 - Docker Desktop 2.3.0.2 针对主机安装的卷(Windows /c 驱动器)
2 分钟 - Docker Desktop 2.1.0.5 对抗容器文件系统
2 分钟 - Docker Desktop 2.3.0.2 对抗容器文件系统
即使使用 Docker 2.1.0.5 对抗主机卷挂载,性能也不是很好。但是随着 DD 2.3 从 ~19 分钟到 ~71 分钟是头脑麻木。
还有其他人在文件 io 密集型任务中看到这种性能下降吗?
有谁知道如何获得使用Swift安装的所有可移动卷的列表?
我已经尝试了这个,但它返回了外部驱动程序的所有文件和子文件夹的列表:
let filemanager:NSFileManager = NSFileManager()
let files = filemanager.enumeratorAtPath("/Volumes")
while let file = files?.nextObject() {
println(file)
menu.addItem(NSMenuItem(title: file as! String, action: Selector(""), keyEquivalent: ""))
}
Run Code Online (Sandbox Code Playgroud) 我正在使用容器步骤在 Azure Devops yaml-pipeline 中运行 docker 映像。但是,我在安装存储库内容时遇到问题,以便可以从 docker 映像内部访问它。
Azure Devops pipeline.yml 文件如下:
container:
image: 'image-name'
endpoint: 'foo'
options: '-v $(Build.SourcesDirectory):/testing'
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script inside docker image'
Run Code Online (Sandbox Code Playgroud)
此操作失败并显示错误消息:
Error response from daemon: create $(Build.SourcesDirectory): "$(Build.SourcesDirectory)" includes
invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended
to pass a host directory, use absolute path
Run Code Online (Sandbox Code Playgroud)
我还尝试替换$(..)$为$[..](请参阅此处,但这会导致相同的错误。此外,${{..}}管道甚至不会启动(错误:UI 中的“在此上下文中不允许使用模板表达式”)
如果我删除options脚本运行,但存储库未安装。 …
我们已经使用 (docker-compose) 卷将 Linux 机器中的文件夹挂载到我们的 docker 容器应用程序: - /mnt/share:/mnt/share
/mnt/share 是机器中的一个挂载文件夹(不是机器中的真正文件夹,它是我们的文件服务器)。如果由于某种原因该安装丢失然后再次重新安装。在容器重新启动之前,在 docker 容器中运行的应用程序无法访问已安装的文件夹。
对于我犯的这个简单错误,我无法在网上找到任何帮助,所以我正在寻求一些帮助。我正在使用服务器在容器中运行 docker 映像,但我输入错误,给自己带来了烦恼。我运行了命令
docker run --rm -v typo:location docker_name
Run Code Online (Sandbox Code Playgroud)
由于我在安装目录时出现了拼写错误,因此它在主机上创建了一个目录,当容器结束时,该目录仍然存在。我尝试删除它,但我收到错误
rm -rf typo/
rm: cannot remove 'typo': Permission denied
Run Code Online (Sandbox Code Playgroud)
我现在知道我应该使用--mount而不是-v为了安全,但损害已经造成;如何在无法访问创建该目录的容器的情况下删除该目录?
我提前道歉,我对 docker 的了解相当有限。我学习它主要是为了使用特定的图像,然后我通过谷歌搜索来完成剩下的工作。
mounted-volumes ×10
docker ×7
kubernetes ×2
mount ×2
angular ×1
angular-cli ×1
azure-devops ×1
cocoa ×1
command-line ×1
dockerfile ×1
macos ×1
mongodb ×1
swift ×1
unix ×1
windows ×1