Docker:/var/run/docker.sock:没有这样的文件或目录

时间:2015-11-16 23:04:35

标签: ubuntu dns docker mesos

红外

我正在尝试设置分发容器的mesos< - >马拉松群集。 在我的主服务器上,我有:

  1. 动物园管理员
  2. docker registry v2(port 5000)wo credentials
  3. 一个带有supervisord + mesos + marathon的容器
  4. 此外,我有一个奴隶(在同一台服务器上)。

    $docker ps 
    192.168.0.38:5000/mesos-slave:prod                                                                                  mesos-slave-1
    192.168.0.38:5000/mesos-master:generic                                                                              mesos-master
    jplock/zookeeper                           0.0.0.0:2181->2181/tcp, 0.0.0.0:2888->2888/tcp, 0.0.0.0:3888->3888/tcp   nostalgic_visvesvaraya
    registry:2                                 0.0.0.0:5000->5000/tcp                                                   registry
    

    问题

    我的问题是我不能让马拉松将码头图像发送给奴隶。

    我认为这来自奴隶的配置。

    $ docker exec -ti mesos-slave-1 /bin/bash
    root@xw8600-Workstation:/# docker info
    Get http:///var/run/docker.sock/v1.19/info: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
    

    问题出在{dial unix /var/run/docker.sock:没有这样的文件或目录}。

    Slave的Dockerfile

    奴隶的Dockerfile看起来或多或少是这样的:

    FROM 192.168.0.38:5000/supervisor:prod
    
    RUN apt-get -y --fix-missing update
    RUN apt-get install -y --force-yes mesos
    
    #Mesos
    RUN echo 'docker,mesos' > /etc/mesos-slave/containerizers
    RUN echo '5mins' > /etc/mesos-slave/executor_registration_timeout
    
    COPY mesos-slave.conf /etc/supervisor/conf.d/mesos-slave.conf
    
    CMD  supervisord -c /etc/supervisor.conf
    

    mesos-slave.conf看起来像这样:

    [program:mesos-slave]
    command=mesos-slave --master=%(ENV_MASTER)s --ip=%(ENV_IP)s --hostname=%(ENV_HOSTNAME)s --resources=%(ENV_RESOURCES)s --attributes=%(ENV_ATTRIBUTES)s --port=%(ENV_SLAVE_PORT)s --log_dir=/etc/mesos/logs --containerizers=docker,mesos --no-switch_user
    

    我在错误日志中总是得到相同的错误。拉rstudio的例子:

    failed to start: Failed to 'docker -H unix:///var/run/docker.sock pull 192.168.0.38:5000:rocker/rstudio': exit status = exited with status 1 stderr = Post http:///var/run/docker.sock/v1.19/images/create?fromImage=192.168.0.38%3A5000%3Arocker%2Frstudio%3Alatest: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
    

    我做错了什么?

    修改

    似乎我无法启动泊坞窗

    root@xw8600-Workstation:/var/log/upstart# sudo /etc/init.d/docker status
     * Docker is not running
    root@xw8600-Workstation:/var/log/upstart# sudo /etc/init.d/docker start
     * Starting Docker: docker
       ...done.
    root@xw8600-Workstation:/var/log/upstart# sudo /etc/init.d/docker status
     * Docker is not running
    

    编辑2

    按照我的问题here:我有一个mesos slave(v1.7),我尝试在docker中运行一个docker。 当我在容器内时,我收到以下错误日志:

    $ cat /var/log/docker.log 
    time="2015-10-17T12:27:40.963674511Z" level=fatal msg="Error starting daemon: error initializing graphdriver: operation not permitted" 
    

    我在互联网上找不到太多信息,这里有一些类似的问题:

    1. https://github.com/jpetazzo/dind/issues/89
    2. https://github.com/docker/docker/issues/14543
    3. Docker hello-world on Ubuntu - permission denied

2 个答案:

答案 0 :(得分:1)

您无法在docker容器中重新启动docker。 You can run docker within a docker containers但重新启动? (如果我错了,请纠正我)

基本上,您正在停止容器中的docker守护程序&x; xw8600-Workstation'而容器本身使用的是相同的docker守护程序。

更好的架构是将你的mesos-slave放在普通虚拟机或裸机中,然后在那里运行你的docker守护进程,让mesos / marathon通过Docker管理你的资源。希望它有意义。

答案 1 :(得分:1)

我在CoreOS上运行完全停靠的Mesos / Marathon基础架构。如果您想查看systemd service definitions,请随意...

我认为您错过了将Docker unix套接字和cgroups传递到您的从属容器,请参阅

Docker运行命令:

docker run -d \
  -v /sys/fs/cgroup:/sys/fs/cgroup \
  -v /usr/bin/docker:/usr/bin/docker:ro \ 
  -v /var/run/docker.sock:/var/run/docker.sock \
  [your other options] \
  192.168.0.38:5000/mesos-slave:prod 

就个人而言,我还会为Marathon运行另一个单独的容器,而不是与Mesos Master一样,但这可能是一个品味问题。