关于 docker-compose 挂载文件的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
icecreamxuegao
V2EX    程序员

关于 docker-compose 挂载文件的问题

  •  < href="Javascript:" Onclick="downVoteTopic(627521);" class="vote">
  •   icecreamxuegao 2019-12-10 10:26:03 +08:00 3991 次点击
    这是一个创建于 2208 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天用 docker-compose 起了 jenkins 的容器,但是再容器里面执行 docker build 命令的时候提示 docker 命令找不到,我就把 docker 和 docker.sock 文件都挂载到了容器里面。在容器用 ls 命令查看的时候一切正常,但是使用 docker 命令的时候提示:
    bash-4.4# docker ps
    bash: /usr/bin/docker: No such file or directory
    百度了好多地方还是没有找到解决方案,所以来问问各位大神。
    docker-compose 的配置文件如下:
    version: "3"

    services:
    jenkins:
    image: jenkins/jenkins:alpine
    restart: always
    user: root
    container_name: jenkins
    volumes:
    - /root/jenkins/j-data:/var/jenkins_home
    - /var/run/docker.sock:/var/run/docker.sock
    - /usr/bin/docker:/usr/bin/docker
    ports:
    - "8080:8080"
    - "50000:50000"
    networks:
    - jenkins_network

    networks:
    jenkins_network:
    15 条回复    2019-12-11 12:12:49 +08:00
    icecreamxuegao
        1
    icecreamxuegao  
    OP
       2019-12-10 10:28:09 +08:00
    其他两个文件挂载正常,我在容器里面用 apk add docker 安装 docker 以后也能正常使用,有点不明白为什么 docker 挂载不上去
    hantsy
        3
    hantsy  
       2019-12-10 10:38:37 +08:00
    Docker 里面再跑 Docker,好像看了一些文章,不怎么推荐使用(有一些莫名的其妙的问题)。

    Docker 里面的运行环境应该另外安装吧。
    hantsy
        4
    hantsy  
       2019-12-10 10:40:29 +08:00
    一般挂载的包括:日志,数据,配置 等需要备份的东西。其他的我好像从来没有通过这种方式去实现 Host,Guest 共享。
    icecreamxuegao
        5
    icecreamxuegao  
    OP
       2019-12-10 10:42:38 +08:00
    @hantsy 没有在 docker 里面跑 docker,我只是想用在 docker 里面用 docker 命令去编译镜像,然后再宿主机里面跑
    sleven
        6/span>
    sleven  
       2019-12-10 10:53:48 +08:00 via iPhone
    你想用 Docker in Docker 模式( DinD )的话不是这么用的,起码不是简单把宿主机的 docker 文件挂载进容器就能用,你可以自己搞个基于 Jenkins 并在里面安装 Docker CE 的镜像。具体可以参考这篇文章: https://medium.com/swlh/quickstart-ci-with-jenkins-and-docker-in-docker-c3f7174ee9ff
    Hopetree
        7
    Hopetree  
       2019-12-10 11:21:01 +08:00   1
    我记得是权限问题,因为 Jenkins 容器的用户是 Jenkins,但是 docker 需要 root 用户以及有权限的用户,反正就是权限问题吧,网上挺多这方面的

    其实我觉得没必要 Jenkins 运行 docker,搞个从节点,从节点有 docker 就行了,我一致都是主从节点搞的,主节点只运行 Jenkins 分配任务,从节点安装各种环境运行任务,从节点可以用容器运行任何,完美解决
    zuihoudezhanyi
        8
    zuihoudezhanyi  
       2019-12-10 14:15:33 +08:00
    /root/jenkins/j-data 目录权限修改为 1000,应该可以了,我之前碰到过
    zuihoudezhanyi
        9
    zuihoudezhanyi  
       2019-12-10 14:17:05 +08:00
    @zuihoudezhanyi 是用户和用户组
    jackleeforce3615
        10
    jackleeforce3615  
       2019-12-10 15:13:20 +08:00   1
    我就是这样玩的,用 docker 的方式运行 jenkins,然后在 jenkins 中 slave 节点也是一些 docker,因此在 jenkins 中必须要能启动 docker 命令,比如 docker run ,docker inspect 等等。

    我是参考这两篇文章:
    https://www.cnblogs.com/leolztang/p/6934694.html
    https://blog.container-solutions.com/running-docker-in-jenkins-in-docker

    如果玩高级一点,docker 方式安装的 jenkins,构建中调用其他服务器(slave)上的 docker,参考:
    https://jacklee.work/%E5%B7%A5%E4%BD%9C/2019-09-27-jenkins%20%E5%A3%B0%E6%98%8E%E5%BC%8Fpipeline%E8%B0%83%E7%94%A8%E8%BF%9C%E7%A8%8BDocker%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1.html

    贴一下我的 docker-compose.yml 和 jenkins 的 dockerfile:

    ![docker-compose]( https://tva1.sinaimg.cn/large/006tNbRwgy1g9rmx1ilvqj30mj0h8wgk.jpg)

    ![dockerfile]( https://tva1.sinaimg.cn/large/006tNbRwgy1g9rmy4arfcj30ld08gt9u.jpg)
    icecreamxuegao
        11
    icecreamxuegao  
    OP
       2019-12-10 17:23:31 +08:00
    好了,问题已经找到了,是因为 alpine 识别不了宿主机可执行文件的格式,换了另外一个镜像就可以了
    icecreamxuegao
        12
    icecreamxuegao  
    OP
       2019-12-10 17:31:31 +08:00
    @jackleeforce3615 thx,我去看看。之前没用过 jenkins
    icecreamxuegao
        13
    icecreamxuegao  
    OP
       2019-12-10 17:32:37 +08:00
    @zuihoudezhanyi 不是权限的问题,是 jenkins 我用了 alpine 版的镜像,宿主机是 centos 的,alpine 识别不了可执行文件
    fatbear
        14
    fatbear  
       2019-12-11 12:04:28 +08:00   1
    @icecreamxuegao 并非是不识别可执行文件,是因为 apline 依赖的底层 C 库是 musl,而你在外面环境编译的 docker 大概率是基于 glibc 的, 库的名称不一致,导致没找到依赖库运行不了,尝试在 apline 镜像里运行 mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 建立 glibc 映射到 musl 的软链接在运行 docker 试试
    fatbear
        15
    fatbear  
       2019-12-11 12:12:49 +08:00   1
    你在里面 apk add docker 可以正常运行自然也很好理解,你在里面安装 docker,在里面编译,自然不会出现不兼容的情况,但是宿主机是 centos,glibc 编译的程序在基于 musl 的 apline 上运行,就会碰到问题。楼主可以用 ldd 查看宿主机的 /usr/bin/docker,再进到容器里用 ldd 查看 apk add docker 之后的 /usr/bin/docker,就很容易明白为什么映射进去的运行不了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2573 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 242ms UTC 14:52 PVG 22:52 LAX 06:52 JFK 09:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86