标签 docker 下的文章

Jenkins无法与Docker连接

搭建好Jenkins后,在script中使用Ubuntu:16.04的镜像测试,构建后提示如下:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Build step 'Execute shell' marked build as failure

Docker实际已经运行,应该是权限方面的问题:

sudo gpasswd -a jenkins docker

重新启动Jenkins的服务即可。

DroneCI启用privileged

有一个构建任务,需要把squash格式的镜像挂载使用,但是在drone里面一直报错。在自己的ubuntu 虚拟机测试可以。然后就手动在docker内测试,发现mount确实无法挂载这个镜像。提示如下

mount failed: Unknown error -1

这里需要给docker添加'--privileged'就可以了。查询drone的相关文档,并询问了相关开发者,才知道如何在drone中开启privileged特性。

  1. drone的服务需要配置DRONE_ADMIN环境变量,值是Gogs的用户名,以','隔开
services:
    drone-server:
        image: drone/drone:latest
        ports:
            - 8000:8000
        volumes:
            - /var/lib/drone:/var/lib/drone/
        restart: always
        environment:
            - DRONE_ADMIN=admin-dev,test
            - DRONE_OPEN=true
            - DRONE_HOST=http://192.168.2.12:8000
            - DRONE_GOGS=true
            - DRONE_GOGS_URL=http://192.168.2.12:3000
            - DRONE_SECRET="Bearer"
            - DRONE_GOGS_SKIP_VERIFY=true
  1. 在drone项目的设置参数中启用'Trusted'开关
  2. 添加'privileged: true'到drone.yml文件
workspace:
    path: /dronebuild
pipeline:
    build:
        image: ubuntu:latest
        privileged: true
        commands:
            - /bin/bash

Drone CI 0.7版本使用docker-compose搭建问题

新版本的Drone CI分离成两个服务,drone和agent。agent依赖于drone。根据手册建议,新版使用docker-compose部署更加文便,但我的一直提示异常。

drone-agent_1   | rpc: error re-connecting: websocket: bad handshake
drone-server_1  | Unable to connect agent. Invalid authorization token "Bearer" does not match ""

细看文档之后才明白是DRONE_SECRET变量设置有问题,这个在drone和agent中要设置成一样的,两个服务才互相连接。然后使用docker-compose启用就可以访问了。

docker-compose -f drone-docker.yml -d up

下面是drone-docker.ymk文件的内容,供参考:

version: '2'

services:
    drone-server:
        image: drone/drone:latest
        ports:
            - 8000:8000
        volumes:
            - /var/lib/drone:/var/lib/drone/
        restart: always
        environment:
            - DRONE_OPEN=true
            - DRONE_HOST=http://192.168.2.12:8000
            - DRONE_GOGS=true
            - DRONE_GOGS_URL=http://192.168.2.12:3000
            - DRONE_SECRET="123456"
            - DRONE_GOGS_SKIP_VERIFY=true

    drone-agent:
        image: drone/drone:latest
        command: agent
        restart: always
        depends_on:
            - drone-server
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        environment:
            - DRONE_SERVER=ws://drone-server:8000/ws/broker
            - DRONE_SECRET="123456"
            - DOCKER_API_VERSION=1.22

使用Docker for Mac时osxfs的cpu占用率过高

打算在Docker内编译Linux内核,直接用volume参数把磁盘挂载进容器内,编译时发现cpu被占用达80%。搜索后知道是volume方式由osxfs组件来服务container和host之前的文件共享,但osxfs对fsevent处理不够好,出现了IO占用CPU资源问题。目前,可以使用的方法是NFS, unison, rsync。NFS不被推荐的原因是对权限管理不好,rsync又是单向的。所以这里使用unison,第一次同步要很长时间后,后续更新都很快,重要的是可以双向功能,container的修改也可以同步到host上。

unison方式的大概原理是,把需要同步的文件或磁盘以socks协议方式同步到container1内,container1把这个目录以volume方式共享出来,这样其它container直接用共享的volume就可以了。socks是在本机上传输所以速度还是比较快的,也绕开了osxfs组件。

同步目录至unison的docker内

docker pull onnimoni/unison
docker run -d -p 5000:5000 --name unison-sync -e UNISON_DIR=/data -v /data onnimonni/unison
pip install MacFSEvents
curl -o /usr/local/bin/unison-fsmonitor -L https://raw.githubusercontent.com/hnsl/unox/master/unox.py
chmod a+x /usr/local/bin/unison-fsmonitor
unison /Volumes/data socket://127.0.0.1:5000/ -auto -batch -repeat watch

在目标container中使用共享的volume,这样在新开的container内的/data目录就能看到host上的/Volumes/data目录下的文件了

docker run -it --volumes-from unison-sync debian /bin/bash

docker编译android-6.0.0_r25

前段时间学习Docker,顺便应用到公司产品上,实现了自动化编译,确实比以前人工测试好多了,避免了很多由环境引起的问题。终于学会volume,可以把本地目录mount到docker里面去编译了。下面是编译记录:

下载代码

mkdir android-6.0
repo init -u https://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-6.0.0_r25
repo sync -c

编译

apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip

apt-get install openjdk-7-jdk

lunch aosp_arm-eng
make -j4

常见问题:

  1. USER问题

    JACKVMCOMMAND="java -Dfile.encoding=UTF-8 -Xms2560m -XX:+TieredCompilation -jar out/host/linux-x86/framework/jack-launcher.jar " JACK_JAR="out/host/linux-x86/framework/jack.jar" out/host/linux-x86/bin/jack-admin start-server out/host/linux-x86/bin/jack-admin: line 27: USER: unbound variable

这是由于docker没有设置USER环境变量导致,手动添加后继续编译即可

export USER=$(whoami)

Link

android 6.0.0

搭建docker registry的问题

Tags: docker

给公司搭docker registry服务,发现用push的时候,会提示http不是安全的,要添加--insecure-registryg到docker启动项中,结果添加后client上依然是有问题的,各种search后,看到一点说,client也是要添加这个参数才可以,问题解决。

最新文章

最近回复

  • Blackrose: 感谢拍砖!嗯,那句话...
  • aa: “Raspberry...
  • Blackrose: 外部只是帮你把芯片启...
  • : 内部时钟比外部的频率...
  • Blackrose: 你这评论比正文更有内容么
  • 7hao: CR+LF ...
  • Blackrose: 可以是你更新软件源后...
  • sxk: 博主,我的系统是ub...
  • Blackrose: 你深得精髓么
  • qihao: 这篇文章的简单总结就...

分类

归档

其它