volumes挂载文件夹没有同步有两个方面
1、文件夹权限问题(宿主和容器的文件夹修改777权限即可)。
容器文件夹修改权限:docker exec 容器 chmod 777 文件路径。
2、容器路径写错问题。
使用 docker exec 容器名(容器id)pwd 可以查看容器目录路径。
如:
[root@iZwz9c3nik8qod00lfj3qnZ ~]# docker exec es-sit pwd
/usr/share/elasticsearch
然后再回写到compose的volumes中就可以了。
做了volumes文件挂载后,使用docker-compose -f docker-compose-es.yml up 创建并运行容器时报错如下:
elasticsearch | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
elasticsearch | output:
elasticsearch | [0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied
elasticsearch | [0.001s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
elasticsearch | error:
elasticsearch | Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
elasticsearch | Error: Could not create the Java Virtual Machine.
elasticsearch | Error: A fatal exception has occurred. Program will exit.
elasticsearch | at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
elasticsearch | at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
elasticsearch | at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
elasticsearch | at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
elasticsearch | at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
es-sit | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
es-sit | output:
es-sit | [0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied
es-sit | [0.001s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
es-sit | error:
es-sit | Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
es-sit | Error: Could not create the Java Virtual Machine.
es-sit | Error: A fatal exception has occurred. Program will exit.
es-sit | at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
es-sit | at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
es-sit | at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
es-sit | at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
es-sit | at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
解决:docker-compose-es.yml中添加TAKE_FILE_OWNERSHIP=true
解释:
绑定-挂载本地目录或文件,请确保该用户能够读懂它,而数据和日志dirs则需要另外的写访问权限。一个好的策略是为本地目录授予组对gid 1000或0的访问权限。例如,准备一个本地目录,以便通过绑定挂载存储数据:
mkdir esdatadir
chmod g+rwx esdatadir
chgrp 1000 esdatadir
最后,您还可以强制容器通过环境变量TAKE_FILE_OWNERSHIP来更改用于数据和日志dirs的绑定挂载的所有权;在这种情况下,它们将归uid:gid 1000:0所有,根据需要提供对Elasticsearch进程的读写访问。
改好后运行不报错,改成后台运行命令:docker-compose -f docker-compose-es.yml up -d
重启ocker-compose -f docker-compose-es.yml restart -d
-d:后台运行
compose文件代码:
services:
elasticsearch:
image: elasticsearch:7.10.1
container_name: elasticsearch
privileged: true
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx1096m" #设置使用jvm内存大小
- "bootstrap.memory_lock=true"
- "TAKE_FILE_OWNERSHIP=true"
- "ELASTICSEARCH_USERNAME=es"
- "ELASTICSEARCH_PASSWORD=123456"
volumes:
- /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /data/elasticsearch/data:/usr/share/elasticsearch/data:rw #数据文件挂载
- /data/elasticsearch/logs:/usr/share/elasticsearch/logs:rw
ports:
- 9200:9200
- 9300:9300
deploy:
resources:
limits:
cpus: "2"
memory: 1000M
reservations:
memory: 200M
es-sit:
image: elasticsearch:7.10.1
container_name: es-sit
privileged: true
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx1096m" #设置使用jvm内存大小
- "TAKE_FILE_OWNERSHIP=true"
- "bootstrap.memory_lock=true"
- "ELASTICSEARCH_USERNAME=es"
- "ELASTICSEARCH_PASSWORD=123!@#es"
volumes:
- /data/elasticsearch/es-sit/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /data/elasticsearch/es-sit/data:/usr/share/elasticsearch/data:rw #数据文件挂载
- /data/elasticsearches-sit/logs:/usr/share/elasticsearch/logs:rw
ports:
- 9201:9200
- 9301:9300
deploy:
resources:
limits:
cpus: "2"
memory: 1000M
reservations:
memory: 200M