我最近使用Docker非常满意,通常会在部署网站之前先测试网站以确保它们在服务器上正常运行。
通常,我将本地目录挂载到本地运行的映像,例如:
docker run -v c:\temp\website:/var/www/html (you get the picture)
Run Code Online (Sandbox Code Playgroud)
我很好奇的是,是否可以将本地卷挂载到运行docker的远程服务器上。我非常确定答案是否定的,除非我在防火墙中戳入整个整数,以便在外部共享本地卷。
但是,我想我会问。Docker似乎正在迅速做一些令人惊奇的事情。
谢谢
实际上,我像这样运行我的容器,例如:
docker run -v /nexus-data:/nexus-data sonatype/nexus3
^
Run Code Online (Sandbox Code Playgroud)
阅读文档后,我发现完全由 docker 管理的卷。出于某些原因,我想改变运行我的容器的方式,做这样的事情:
docker run -v nexus-data:/nexus-data sonatype/nexus3
^
Run Code Online (Sandbox Code Playgroud)
我想将我现有的绑定安装转移到卷。
但我不想将数据丢失到/nexus-data文件夹中,是否有可能将此文件夹传输到新卷,而无需重新启动所有内容?因为我也有 Jenkins 和 Sonar 容器,所以我只想改变拥有持久数据的方式。这是一个正确的方法来做到这一点?
我的 Github Actions 中有以下逻辑:
但是,当我执行此操作时,我发现步骤 1 中的本地文件夹未安装到 docker 容器。
我想将本地目录作为卷安装到 docker 容器。我的 docker-compose 文件如下所示:
version: '3.9'
services:
kong-cp:
image: myImage
restart: on-failure
user: root
volumes:
- ./rsa:/tmpRun Code Online (Sandbox Code Playgroud)
我的 GitHub Actions 工作流程如下所示:
name: Test
on: workflow_dispatch
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout docker-compose-generator
uses: actions/checkout@v3
with:
repository: docker-compose-generator
token: ${{ secrets.GH_TOKEN }}
ref: test/mount
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USR }}
password: ${{ secrets.DOCKERHUB_PSW }} …Run Code Online (Sandbox Code Playgroud)在我的Ubuntu EC2主持一个使用docker容器的应用程序.db数据和upload数据存储在卷中,CaseBook-data-db并CaseBook-data-uploads使用以下命令创建:
docker volume create --name=CaseBook-data-db
docker volume create --name=CaseBook-data-uploads
Run Code Online (Sandbox Code Playgroud)
通过docker-compose文件附加的卷:
version: '2'
services:
mongo:
container_name: "CaseBook-db"
restart: always
image: mongo:3.2.7
ports:
- "27017"
volumes:
- data_db:/data/db
labels:
- "ENVIRONMENT_TYPE=meteor"
app:
container_name: "CaseBook-app"
restart: always
image: "meteor/casebook"
build: .
depends_on:
- mongo
environment:
- MONGO_URL=mongodb://mongo:27017/CaseBook
ports:
- "80:3000"
volumes:
- data_uploads:/Meteor-CaseBook-Container/.uploads
labels:
- "ENVIRONMENT_TYPE=meteor"
volumes:
data_db:
external:
name: CaseBook-data-db
data_uploads:
external:
name: CaseBook-data-uploads
Run Code Online (Sandbox Code Playgroud)
我需要将这些docker卷存储/home/ubuntu/data/在主机的不同文件夹(例如)中.如何更改卷的docker存储文件夹?或者有更好的方法来做到这一点?先感谢您.
我有一个这样的 docker-compose.yml:
version: '2'
services:
app:
build: .
volumes:
- /usr/src/app
Run Code Online (Sandbox Code Playgroud)
如果我这样做docker-compose up,那么我对 /usr/src/app 所做的任何更改都会在运行中保持不变。可以control+C然后docker-compose up,内容还在。
但如果我这样做docker-compose run app ls -la /usr/src/app,那么路径总是空的。
我的目标是,我希望该卷 1) 自动为我自动创建,2) 特定于这个 docker-compose 项目(因为我会有很多其他项目),并且 3) 在 docker-compose up 中持续存在/运行/等。
我认为解决这个问题的一种方法是使用命名卷,它会自动提取我的 docker-compose 项目的名称。
但是对于动态容器,这是预期的行为吗?它们会自动持续存在docker-compose up,并为每个docker-compose run?
另外,是否有任何文档明确了动态容器的生命周期?
谢谢!
我创建了一个 docker 镜像,允许用户使用 SSH 连接它。
出于安全原因,我希望用户可以更改他们的密码。我只使用 docker 命名的卷,所以我无法绑定 /etc/passwd 并且我不想挂载所有 /etc
有任何想法吗?提前致谢。
我正在使用 docker-compose 并且我想创建一个相对的双路径绑定。
Folder structure and path at the host machine:
/Users/username/Documents/Repos/docker-gulp-template/bla
docker-gulp-template
Dockerfile
docker-compose.yml
Bla (Folder)
Run Code Online (Sandbox Code Playgroud)
Path structure inside the container:
/usr/src/html/bla
Run Code Online (Sandbox Code Playgroud)
version: '3'
services:
bla:
command: /bin/bash
stdin_open: true
#tty: true
container_name: docker-gulp-template
#restart: always
build: .
ports:
- '80:3000'
volumes:
- "/bla:/usr/src/html/bla"
Run Code Online (Sandbox Code Playgroud)
这确实会导致错误。
ERROR: for docker-gulp-template Cannot start service bla: b'Mounts denied: \r\nThe path /bla\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee …Run Code Online (Sandbox Code Playgroud) 我使用 docker 和 docker compose 将科学工具打包成易于/通用的可执行模块。一个例子是一个 docker,它将一个相当复杂的 python 库打包到一个运行 jupyter notebook 服务器的容器中;这个想法是,其他不太精通技术的科学家可以克隆一个 github 存储库,运行docker-compose up然后进行分析,而无需安装库、配置各种插件和其他依赖项等。
我让这一切工作正常,只是我在让卷安装以连贯的方式工作时遇到问题。这样做的原因是 docker 容器内的库处理多种数据集,用户将这些数据集存储在几个单独的目录中,这些目录通常通过 shell 环境变量进行跟踪。(请不要告诉我这是一个糟糕的方法——这是在现场做事的方式,而不是我选择的做事方式。)因此,例如,如果用户存储 FreeSurfer 数据,它们将有一个名为 SUBJECTS_DIR 的环境变量,指向包含数据的目录;如果他们存储 HCP 数据,他们将有一个环境变量 HCP_SUBJECTS_DIR。但是,他们可能同时拥有这些集合,或者两者都没有(以及其他一些)。
我希望能够在我的 docker-compose.yml 文件中放置类似的内容以处理这些情况:
version: '3'
services:
my_fancy_library:
build: .
ports:
- "8080:8888"
environment:
- HCP_SUBJECTS_DIR="/hcp_subjects"
- SUBJECTS_DIR="/freesurfer_subjects"
volumes:
- "$SUBJECTS_DIR:/freesurfer_subjects"
- "$HCP_SUBJECTS_DIR:/hcp_subjects"
Run Code Online (Sandbox Code Playgroud)
在对此进行测试时,如果用户设置了两个环境变量,则一切正常。但是,如果他们没有这些设置中的一个,我会收到一个关于不安装长度少于 2 个字符的目录的错误(我认为这是对安装由“:/hcp_subjects”指定的卷的抱怨)。
这个问题问的基本相同,答案指向这里,如果我理解正确的话,它基本上解释了如何以某种方式解决多个 docker-compose 文件。由于以下几个原因,这对于我的案例来说并不是一个真正可行的解决方案:
我能够想出的唯一体面的解决方案是要求用户运行脚本./run.sh而不是docker-compose up; 该脚本检查环境变量,docker-compose.yml用适当的卷写出自己的文件,然后 …
我正在将我们的 Web 应用程序转移到 docker-compose 部署(Django、DRF、AngularJS)。
Docker 现在看起来很稳定,一切进展顺利。
我想要:
我已经设法使用环境变量和从 Djangosettings.py文件读取的 docker-compose 机密,并且它可以工作。缺点是环境变量仅限于简单的字符串,并且在发送 Python 列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护大量环境变量,因为我们的 Web 应用程序安装在很多地方并且具有高度可配置性。
在前端(AngularJS),我们有两个constants.js文件和 nginx conf。我在 Dockerfile 中使用过CMD ["/start.sh"]并有一些sed命令。但这看起来真的很黑客,这也意味着我们必须定义和维护相当多的环境变量。
对于这些配置文件使用 Docker 卷是个好主意吗?
“卷文件”之类的东西是否确实存在(此处提到)或者它实际上是绑定安装?绑定挂载不太推荐,因为它们依赖于主机上的文件系统和文件路径。
Volumes 文档简要提到了文件:“文件或目录在容器中安装的路径”,但没有详细介绍。
我们的网络应用程序现在有简单的配置文件:
settings.pysite\contants.jsadmin\constants.js和:
我想避免将这些文件移动到可以安装的专用目录。
您能给我展示一个带有单个文件卷(不是绑定安装)的示例 docker-compose.yml 吗?
谢谢
我想使用 Docker 进行本地开发。当我使用 Docker Compose 创建 Wordpress 容器时,所有内容都在浏览器中加载得非常快。它比使用 Local by Flywheel 快得多。问题是我无权访问 Wordpress 文件。为了访问这些文件,我将卷添加到 docker-compose.yml 中:
volumes:
- ./wp-content:/var/www/html/wp-content
Run Code Online (Sandbox Code Playgroud)
我现在可以访问这些文件,但是浏览器中的所有内容加载速度都很慢,以至于使用 Docker 失去了意义。是否有可能以任何方式加快速度?
volumes ×10
docker ×9
amazon-ec2 ×1
django ×1
dockerfile ×1
linux ×1
macos ×1
mongodb ×1
mount ×1
passwd ×1
path ×1
ubuntu-14.04 ×1
wordpress ×1