我有以下docker-compose文件:
version: "3.3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes:
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports:
- "9300:9300"
- "9200:9200"
volumes:
esdata:
(为清楚起见,我删除了其他服务)我可以在/ var / lib / docker / volumes / project_name_esdata中看到卷但我希望能够在docker-compose.yml所在的目录中创建卷,但我没有'找到一种方法。
受到How to set a path on host for a named volume in docker-compose.yml的启发,我试过了
version: "3.3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes:
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports:
- "9300:9300"
- "9200:9200"
volumes:
esdata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: './'
但这会引发以下异常:
Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
请告诉我是否应该发布完整的堆栈跟踪或任何其他相关信息。
如果您使用./,卷将被安装在同一个文件夹中(之前我已经遇到了权限问题,所以你知道)
version: "3.3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes:
- ./esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports:
- "9300:9300"
- "9200:9200"
volumes:
esdata:
您的配置几乎没问题,但您需要使用绝对路径,因为device: ./
导致挂载根文件系统而不是当前目录(这就是您拒绝访问的原因)
在device: /opt/your-project/data
等设备中使用绝对路径 - 请注意,目录必须在使用前存在。