Docker翻车实录:一个参数成绩,坑了我半天……
一、背景
新上线一个批处理功效,基于Docker公布的。上线之后显现一个成绩,Docker批处理天生的文件目次,别的使用步骤无法拜候。
之前也在使用Docker,但并未触及到文件共享的成绩,还真没注意到。颠末一系列排查,终于找到缘故。这篇文章就纪录一下排查历程中使用到的武艺点,也帮各位重温一下。
触及的知识点:Docker help下令、Linux用户/组id查察、Docker用户指定、Docker启动失败日志查察等
二、征象分析
Docker运转的项目定时创建文件目次并举行文件天生等利用,但当其他使用步骤来利用Docker使用天生的目次时,会提示“Permission denied”错误。
查察Docker天生的文件夹权限,居然是以root用户创建的。实行Docker的启动脚老实明是平凡用户,天生的文件怎样就变成了root用户了?
这里就触及到经过Docker实行实行时所使用的用户了。假如在实行Docker实行下令时,未指定所使用的用户,默许以root用户实行。在这消费情况下固然是不允许的了。
三、成绩处理
既然找到成绩的缘故处理起来就比力容易了,底下纪录一下处理成绩及触及到的一些Docker下令和Linux利用。
1、查询协助文档
先来经过help下令查察一下Docker的下令参数,怎样来指定实行下令的用户。
先实验了docker --help下令,后果并未找到指定用户的下令参数:
$ sudo docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
厥后才熟悉到,查找的应该是docker的run下令的协助文档:
$ sudo docker run --help
...
-u, --user string Username or UID (format: