我有以下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
请让我知道是否应该发布完整的堆栈跟踪或任何其他相关信息。
答案 0 :(得分:1)
如果您使用./,则该卷将被安装在同一文件夹中(这样做之前,我曾遇到权限问题)
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:
答案 1 :(得分:0)
您的配置几乎可以,但是您需要使用绝对路径,因为device: ./
会导致挂载根文件系统而不是当前目录(这就是为什么您拒绝访问的原因)
在device: /opt/your-project/data
之类的设备中使用绝对路径-请注意,使用之前该目录必须存在。