2.2.10. 常见问题¶
环境变量问题¶
设置环境变量要用 ENV:
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV PATH $JAVA_HOME/bin:$PATH
用 echo “JAVA_HOME /usr/local/jdk1.8.0_171” >> /etc/profile 就出错
Docker.raw占用过多的磁盘空间¶
$ cd ~/Library/Containers/com.docker.docker/Data/vms/0
$ zhaoweiguo$ ls -lh Docker.raw
-rw-r--r--@ 1 zhaoweiguo staff 15G Jun 25 13:56 Docker.raw
// 使用ls命令占用15G,而使用du命令占用只有3.6G
$ du -hs Docker.raw
3.6G Docker.raw
原因:
// ls默认列出的是逻辑大小而不是物理大小, 物理大小要使用-ks
$ zhaoweiguo$ ls -lhks Docker.raw
3728116 -rw-r--r--@ 1 zhaoweiguo staff 15G Jun 25 13:56 Docker.raw
此例中,逻辑大小是15G,物理大小是3.6G
证书问题¶
问题:
Get https://zhaoweiguo.com/auth: x509: certificate signed by unknown authority
panic: Get https://zhaoweiguo.com/auth: x509: certificate signed by unknown authority
解决:
alpine镜像, 增加一条语句:
RUN apk add --no-cache ca-certificates
挂载的目录没有权限¶
问题:
$host> docker run -v /tmp/zwg:/data --name xinxi alpine
$host> docker exec -it xinxi /bin/bash
$docker> touch /data/abc
cannot touch /data/abc: Permission denied
原因:
centos7中安全模块selinux把权限禁掉了
解决方案:
1. 在运行时加 --privileged=true
2. 临时关闭selinux然后再打开
$> setenforce 0 // 关闭
...
$> setenforce 1 // 再打开
3. 添加linux规则,把要挂载的目录添加到selinux白名单
chcon [-R] [-t type] [-u user] [-r role] 文件或者目录
选顷不参数:
-R :该目录下的所有目录也同时修改;
-t :后面接安全性本文的类型字段,例如 httpd_sys_content_t ;
-u :后面接身份识别,例如 system_u;
-r :后面街觇色,例如 system_r
实例:
chcon -Rt svirt_sandbox_file_t /tmp
Networking will not work¶
问题:
---> [Warning] IPv4 forwarding is disabled. Networking will not work.
---> Running in 10ad6724b3b8
原因:
容器要想访问外部网络,需要本地系统的转发支持
定位:
在Linux 系统中,检查转发是否打开:
$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0 # 如果为0说明没有开启转发
解决:
方法1(手动打开):
$sysctl -w net.ipv4.ip_forward=1
方法2(启动时指定):
如果在启动 Docker 服务的时候设定 --ip-forward=true, Docker 就会自动设定系统的 ip_forward 参数为 1