目录

docker Q&A

挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied"

可通过两种方式解决:

  • 关闭 selinux

    临时关闭:setenforce 0

    永久关闭:修改/etc/sysconfig/selinux文件,将SELINUX的值设置为disabled。

  • 以特权方式启动容器

    指定 –privileged 参数

    如:docker run -it --privileged=true -v /test:/soft centos /bin/bash

获取宿主机 IP

####### linux

在 linux 系统中,默认为 172.17.0.1

宿主机内查看 net interface docker0

1
ifconfig docker0

####### mac

mac 内 docker 运行是基于虚拟机, 所有的网络都经过 loopbakc:lo0 网卡进行通信

容器访问宿主机需要使用 docker.for.mac.host.internal 域名

容器连接
1
2
3
--link <name or id>:alias
docker run --name [container_name] -d gsoft/mysql:5.6
docker run --name [container_name] -d -p 80:8080 --link [] gsoft/tomcat:7.0
attach 与 exec 主要区别
  • attach 直接进入容器启动命令的终端,不会启动新的进程。
  • exec 则是在容器中打开新的终端,并且可以启动新的进程。
  • 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。/
将容器中文件拷贝到宿主机
1
docker cp ${c_id}:/usr/local/tomcat/conf/context.xml .    
使用 ip route add 命令提示权限不足

原因: 默认情况下,docker的容器中的root的权限是有严格限制的,比如,网络管理(NET_ADMIN等很多权限都是没有的。

解决方案:

添加 –cap-add=NET_ADMIN

docker run --cap-add=NET_ADMIN -it --rm centos:7 /bin/bash

参考文档

http://hustcat.github.io/docker-config-capabilities/

docker 推送镜像到 harbar
1
2
3
4
5
6
# 设置标签
docker tag SOURCE_IMAGE[:TAG] harbor.example.cn/REPO/IMAGE[:TAG]
# 登录 harbar
docker login https://harbar.example.cn
# 推送
docker push harbor.example.cn/REPO/IMAGE[:TAG]
docker login http://harbar.example.cn 报错: Error response from daemon: Get “https://harbar.example..cn/v2/": Service Unavailable

原因: 需要使用 https 访问

解决办法: 添加不需要 https 认证的域名

  1. 修改/etc/docker/daemon.json文件

    1
    
    vim /etc/docker/daemon.json
    
  2. 添加 insecure-registries

    1
    2
    3
    
    {
      "insecure-registries":["harbar.example.cn"] 
    }
    
下载国外镜像

参考文档 https://blog.csdn.net/qq_27028561/article/details/79064414

  1. 使用 github 保存 Dockerfile

    • 创建一个新的仓库, 写入一个文件 Dockerfile

    • Dockfile 文件内容为

      1
      2
      
      # 示例 k8s.gcr.io/heapster-amd64:v1.4.2
      FROM k8s.gcr.io/heapster-amd64:v1.4.2
      
  2. docker 新建镜像关联 git 仓库

    • 登录 docker hub 账户, 与 github 账户关联 Link Account
    • 创建一个 hub , 与 github 仓库关联
    • 选择仓库的分支, build
  3. 本地下载,重新 tag

    • docker pull your_docker_name/res:label
    • docker tag local_image_name:label want_image_name:lable