我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Run Code Online (Sandbox Code Playgroud)
我的目标是安装一个./database
与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres
.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/
了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database
只获取了一个data
文件夹,即./database/data
创建了它,但它是空的.为什么?
笔记:
根据尼克的建议,我做了一个docker inspect
并发现:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Run Code Online (Sandbox Code Playgroud)
这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database
?
我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.
我有一个开发环境,我是dockerizing,我希望能够重新生成我的更改,而无需重建docker镜像.我正在使用docker compose,因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器
我有两个容器定义docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Run Code Online (Sandbox Code Playgroud)
我已经在我的node
应用程序的dockerfile中添加了一个卷,但是如何在卷中安装主机的目录,以便我对代码的所有实时编辑都反映在容器中?
这是我当前的Dockerfile:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN …
Run Code Online (Sandbox Code Playgroud) 为了跟踪docker-compose使用的卷,我喜欢使用命名卷.这适用于"普通"卷
version: 2
services:
example-app:
volume:
-named_vol:/dir/in/container/volume
volumes:
named_vol:
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在安装本地主机时使其工作.我正在寻找类似的东西:
version: 2
services:
example-app:
volume:
-named_homedir:/dir/in/container/volume
volumes:
named_homedir: /c/Users/
Run Code Online (Sandbox Code Playgroud)
要么
version: 2
services:
example-app:
volume:
-/c/Users/:/home/dir/in/container/ --name named_homedir
Run Code Online (Sandbox Code Playgroud)
这是以任何可能的方式,还是我坚持使用已安装的匿名卷?
我想将此 docker CLI 命令(来自Smallstep/step-ca)转换为 docker-compose.yml 文件以运行docker compose
(版本 2):
docker run -d -v step:/home/step \
-p 9000:9000 \
-e "DOCKER_STEPCA_INIT_NAME=Smallstep" \
-e "DOCKER_STEPCA_INIT_DNS_NAMES=localhost,$(hostname -f)" \
smallstep/step-ca
Run Code Online (Sandbox Code Playgroud)
此命令成功启动容器。
这是我“撰写”的撰写文件:
version: "3.9"
services:
ca:
image: smallstep/step-ca
volumes:
- "step:/home/step"
environment:
- DOCKER_STEPCA_INIT_NAME=Smallstep
- DOCKER_STEPCA_INIT_DNS_NAMES=localhost,ubuntu
ports:
- "9000:9000"
Run Code Online (Sandbox Code Playgroud)
当我运行时docker compose up
(再次,在这里使用 v2),我收到此错误:
服务“ca”指的是未定义的卷步骤:无效的撰写项目
这是解决这个问题的正确方法吗?我想我错过了在 docker compose 项目中创建卷的额外步骤,但我不确定那会是什么,或者这是否是一个有效的用例。
我想通过使用单个撰写文件为 tomcat、documentum content server 和 documentum xplore 创建容器。由于 docker-compose.yml 文件中提到的卷,我面临着问题。能够通过单独执行撰写文件来启动服务。问题是当我尝试将撰写文件合并在一起时。想知道如何使用 docker compose 运行带有卷的多个容器。
以下是单个撰写文件:
version: '2'
networks:
default:
external:
name: dctmcs_default
services:
dsearch:
image: xplore_ubuntu:1.6.0070.0058
container_name: dsearch
hostname: dsearch
ports:
- "9300:9300"
volumes:
- xplore:/root/xPlore/rtdata
indexagent:
image: indexagent_ubuntu:1.6.0070.0058
container_name: indexagent_1
hostname: indexagent_1
ports:
- "9200:9200"
environment:
- primary_addr=dsearch
- docbase_name=centdb
- docbase_user=dmadmin
- docbase_password=password
- broker_host=contentserver
- broker_port=1689
depends_on:
- dsearch
volumes_from:
- dsearch
volumes:
xplore: {}
tomcat_8:
image: tomcat_8.0:ccms
container_name: appserver
hostname: appserver
ports:
- "9090:8080"
contentserver:
image: contentserver_ubuntu:7.3.0000.0214 …
Run Code Online (Sandbox Code Playgroud) 假设我有一个卷,我知道它的名字或ID.
我想确定使用该卷的容器列表(它们的名称或ID).
我可以使用哪些命令来检索此信息?
我认为它可以存储在docker volume inspect <id>
命令的输出中,但除了mountpoint("/var/lib/docker/volumes/<id>"
)之外它没有任何帮助
第一次尝试设置docker,我遇到卷问题.我非常有信心.yml中的间距和格式在这一点上是正确的.
我尝试过版本3,3.1,3.2,3.3和3.4.所有都收到相同的错误消息(如下)
services.volumes不支持的配置选项:'db2_prod'
version: '3'
services:
liberty:
image: liberty:${liberty_tag}
ports:
- "${liberty_ip}:9080:9080"
- "${liberty_ip}:9443:9443"
restart: always
apache:
image: webapp:${apache_tag}
ports:
- "${apache_ip}:80:80"
- "${apache_ip}:443:443"
restart: always
db2:
image: db2:${db2_tag}
ports:
- "${db2_ip}:50000:50000"
stdin_open: true
tty: true
restart: always
volumes:
- db2_prod:/database/stagg3
volumes:
db2_prod:
Run Code Online (Sandbox Code Playgroud) 通过卷API创建卷时,也就是说,容器卷模式现在不再是最佳实践了:
# docker volume inspect test-data
[
{
"Name": "test-data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/test-data/_data"
}
]
Run Code Online (Sandbox Code Playgroud)
我想,例如,/ data中存在docker卷(它安装在不同的物理卷中).
这不可能与符号链接有关,可以使用绑定挂载,但我想知道Docker中是否有一些配置来更改每个单独卷的默认位置.
我正在docker-compose.yaml
为我的项目编写一个文件。我已经检查了这里的卷文档。
我还了解 docker 中的概念volume
,即我可以安装卷,例如主机上的目录在 -v my-data/:/var/lib/db
哪里,而数据库容器内的路径在哪里。my-data/
/var/lib/db
我的困惑在于我上面放置的链接。那里有以下示例:
version: "3.9"
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
- data-volume:/var/lib/backup/data
volumes:
data-volume:
Run Code Online (Sandbox Code Playgroud)
我想知道这是否意味着我必须data-volume
在我的主机上创建一个名为的目录?如果我的计算机上有一个带有路径的目录temp/my-data/
,并且我想将该路径挂载到数据库容器, 该怎么办/var/lib/db
?我应该做下面这样的事情吗?
version: "3.9"
services:
db:
image: db
volumes:
- temp/my-data/:/var/lib/db
volumes:
temp/my-data/:
Run Code Online (Sandbox Code Playgroud)
我的主要困惑是volumes:
底部的部分,我不确定卷名是否应该是我的目录的路径,或者应该只是我给出的字面名称,如果是后一种情况,那么给定的名称如何映射temp/my-data/
在我的机器上?该示例并未表明 & 含糊不清,以澄清这一点。
有人可以帮我澄清一下吗?
PS我尝试使用上面的 docker-compose 我猜,最终出现错误:
ERROR: The Compose file './docker-compose.yaml' is invalid because:
volumes value 'temp/my-data/' does not match any of …
Run Code Online (Sandbox Code Playgroud) 为什么我会收到此错误? __CODE__
我的docker-compose文件几乎与此相同:https://docs.docker.com/compose/wordpress/
version: '2'
services:
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_HOST: 3306
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume: ~/mariadb
Run Code Online (Sandbox Code Playgroud)