我正在尝试使用 Docker 运行我的应用程序,这是我的 yml 文件内容来运行 mongo 容器。
\n services:\n mongodb:\n image: mongo:3.4\n # ports:\n # - "27017:27017"\n volumes:\n - ./data/mongo:/data/db\n restart: always\nRun Code Online (Sandbox Code Playgroud)\n并在 contianer 中收到此错误:(运行 docker log 命令后看到此错误)
\n\n\nchown:更改“/data/db”的所有权:不允许操作
\n
主机有 ./data/mongo 文件夹,以下是详细信息。
\ndrwxrwxrwx 2 nfsnobody nfsnobody 4096 May 11 23:13 mongo\nRun Code Online (Sandbox Code Playgroud)\n我尝试按照其中一个论坛的建议在主机上运行它。
\nsudo chgrp 1000 ./data/mongo\nRun Code Online (Sandbox Code Playgroud)\n不知道这将如何帮助解决问题,因为我们得到的错误是在容器文件夹中而不是来自主机的错误,无论如何我都尝试过。。
\n但得到了这样的回应:
\n\n\nchgrp:更改 \xe2\x80\x98mongo\xe2\x80\x99 组:不允许操作
\n
如何解决这个问题?除了“chgrp”之外还有其他解决方案吗?谢谢。
\n这是完整的 docker-compose.yml 文件
\n## You can generate a custom docker compose …Run Code Online (Sandbox Code Playgroud) 我刚刚在youtube上阅读本教程并尝试解释使用-v命令,IE为什么教程中的人使用-v命令?他使用命令,像这样,
docker run -v /var/lib/mysql --name=my_datastore -d busybox echo "my datastore"
Run Code Online (Sandbox Code Playgroud)
现在我理解IE上面的命令
my datastore
Run Code Online (Sandbox Code Playgroud)
为容器指定一个特定名称.
-v /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
上面的命令搜索busybox图像,如果没有找到它将从中拉出-v并在后台作为守护进程运行它.
执行run命令后,下面的行将回显到控制台.
docker run -v /var/lib/mysql --name=my_datastore -d busybox echo "my datastore"
Run Code Online (Sandbox Code Playgroud)
现在我不理解的部分如下:
my datastore
Run Code Online (Sandbox Code Playgroud)
为什么-v这里使用的命令以及--name=my_datastore指定路径的原因是什么?我很难理解为什么使用上述行以及在什么情况下使用?谁能解释一下?
所以我对码头工作者来说相当新.将我的命名卷附加到我的群中的服务时遇到问题.
这是我的docker-compose.yml ...
version: '3'
services:
ned:
image: keli
ports:
- "8080:8080"
depends_on:
- craig
- paul
craig:
image: cb
volumes:
- cbKeli:/opt/couchbase/var
ports:
- "8091:8091"
paul:
image: pg
volumes:
- pgKeli:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
pgKeli:
cbKeli:
Run Code Online (Sandbox Code Playgroud)
然而,在docker-compose up我结束新卷之后.
$ docker volume ls | grep -i keli
DRIVER VOLUME NAME
local cbKeli
local kelidocker_cbKeli
local kelidocker_pgKeli
local pgKeli
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?如何让我的新群体使用现有的命名卷?
有推荐的使用Kubernetes Secrets的方法吗?它们可以作为环境变量或使用卷安装公开。一个比另一个更安全吗?
environment-variables kubernetes docker-volume kubernetes-security kubernetes-secrets
当我docker volume inspect <dockerid>在 Mac 上执行 a时,我可以看到数据的路径,这显示为/var/lib/docker/volumes/<volume name>
在 Mac 上,此链接不存在,因为 docker 在非常小的 VM 内运行。
我可以使用screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty进入虚拟机,然后导航到文件夹以查看卷。
搞定了这一切,但我的问题是:如何链接主机上这些卷中的内容?
我试过这个:docker run -it --volume hello:/hello2 --name access_volumes busybox:latest /bin/sh你好是我创建的卷的名称。
我可以将主机上的文件夹链接到容器,但我想从主机备份内容或编辑卷的内容。
我怎么做?
这是 my docker-compose.yml,它包含一个 web 服务,它在本地安装一个文件夹,以便在任何代码更改时watchmedo重新启动webappdjango 服务器。它是 nginx 的反向代理。
version: '3'
services:
webapp:
build:
context: .
dockerfile: ./web/Dockerfile
volumes:
- ./web/:/usr/src/app/
- staticfile_volume:/usr/src/app/public
entrypoint: >
watchmedo auto-restart --recursive
--pattern="*.py" --directory="."
gunicorn myapp.wsgi:application -- --bind 0.0.0.0:9000
nginx:
build:
context: .
dockerfile: ./nginx/Dockerfile
depends_on:
- webapp
volumes:
- staticfile_volume:/usr/src/app/public
volumes:
staticfile_volume:
Run Code Online (Sandbox Code Playgroud)
我的本地文件设置如下:
$ tree -L 2
.
??? docker-compose.yml
??? nginx
? ??? Dockerfile
? ??? nginx.conf
??? web
??? Dockerfile
??? manage.py
??? myapp
??? public
??? …Run Code Online (Sandbox Code Playgroud) 如何列出所有 Docker 卷及其各自的大小。
docker volume inspect $(docker volume ls)
Run Code Online (Sandbox Code Playgroud)
提供有关所有卷但每个卷大小的信息。
最好,我想检查大小,而不必将它们安装到某个容器中,因为我有超过 20 个卷,其中包含一些神秘的“散列”卷名称,可能会产生一些错误,我正在尝试查找这些错误。
我有运行大量 Docker 容器的测试。他们每个人都有一个卷。
我如何知道需要删除的卷名称?
例如:
~ docker run -d registry:2
~ docker volume inspect c80fc65a79039d70cf54b3af3ab66b378dec42d0757928ae94277b197d8d8104
[
{
"CreatedAt": "2020-08-14T11:33:50Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/c80fc65a79039d70cf54b3af3ab66b378dec42d0757928ae94277b197d8d8104/_data",
"Name": "c80fc65a79039d70cf54b3af3ab66b378dec42d0757928ae94277b197d8d8104",
"Options": null,
"Scope": "local"
}
]
Run Code Online (Sandbox Code Playgroud)
手动停止并删除registry:2容器后,该卷仍然存在。
我不想删除所有卷,因为其中一些仍在使用中。
容器不断重启。我试过
容器工作正常,直到我的电脑意外关闭。
2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2021-03-27 13:16:08+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
Remove MYSQL_USER="root" and use one of the following to control the root user password:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- …Run Code Online (Sandbox Code Playgroud) 我有一个 docker-compose 工作了很长时间然后突然停止了。我收到:无法安装本地卷,没有这样的文件或目录
这已经工作了几个月,并在几周前开始出现错误。docker-compose 位于源代码管理中,我可以看到它没有改变。我开始在一台新机器上安装它,不久之后我开始在我现有的盒子上安装它。我怀疑这是一种安全或政策设置。我尝试安装旧版本的 docker 桌面,但仍然出现错误。
这是命令和完整错误:
docker-compose up -d
[+] Running 0/1
- Container dockertest_testimage_1 Starting 1.1s
Error response from daemon: error while mounting volume '/var/lib/docker/volumes/dockertest_testLoc/_data': failed to mount local volume: mount testimage:/var/lib/docker/volumes/dockertest_testLoc/_data, flags: 0x1000: no such file or directory
Run Code Online (Sandbox Code Playgroud)
这是给出相同错误的组合的测试版本。
version: '3.9'
services:
testimage:
image: ubuntu
volumes:
- testLoc:/var/opt/testing
volumes:
testLoc:
driver: local
driver_opts:
type: "none"
o: "bind"
device: "./testimage"
Run Code Online (Sandbox Code Playgroud)
版本:
Docker version 20.10.11, build dea9396
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.19044 N/A …Run Code Online (Sandbox Code Playgroud) docker-volume ×10
docker ×8
django ×1
dockerfile ×1
kubernetes ×1
macos ×1
mongodb ×1
mysql ×1
nginx ×1