Docker中的Dropbox

use*_*621 13 dropbox docker

我想在Docker容器中运行Dropbox.这样我就可以通过将数据上传到Dropbox来与docker同步数据.并且还维护数据备份,这在运行新版本的docker镜像时非常有用.

创建了这个简单的Dockerfile

FROM phusion/baseimage:0.9.15

#Install wget
RUN apt-get update && \
    apt-get -f install && \
    apt-get install -y wget

#Install Dropbox
RUN mkdir /usr/local/dropbox && \
    cd /usr/local/dropbox && \
    wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

RUN mkdir /etc/service/dropbox
ADD ./dropbox.sh /etc/service/dropbox/run

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
Run Code Online (Sandbox Code Playgroud)

和服务文件dropbox.sh

#!/bin/sh
exec /usr/local/dropbox/.dropbox-dist/dropboxd
Run Code Online (Sandbox Code Playgroud)

构建并运行Docker镜像后,Dropbox说: 这台计算机没有链接到任何Dropbox帐户......

并提供将Dropbox帐户与当前计算机相关联的链接.链接后,我看到一条欢迎消息,数据在/ root/Dropbox文件夹中是syncyd.

我提交了泊坞变化

sudo docker commit `sudo docker ps -l -q` imagename
Run Code Online (Sandbox Code Playgroud)

但是当杀死docker容器并再次运行它时Dropbox坚持认为: 这台计算机没有链接到任何Dropbox帐户......

我确认内部容器,文件夹/ root/Dropbox存在,并且数据在那里,在先前的容器执行期间同步.但我的容器丢失了与Dropbox的链接,需要再次链接.

我错过了什么?如何在容器执行之间保持Dropbox-Docker_container链接?

her*_*off 8

构建并运行Dockerfile之后,我遇到的第一个问题是runit抱怨缺少权限.您需要RUN chmod +x /etc/service/dropbox/run在复制服务脚本后添加.

研究重新启动之间有什么变化,我发现/root/.dropbox/instance1/hostkeys/root/.dropbox/instance_db/hostkeys改变.这可能与您使用的Phusion图像有关,但我不知道为什么.我的猜测是,这是因为你正在运行dropboxd通过exec(因此不使用bash),每次运行(=启动容器)的时候,有没有用户主文件夹,从哪里获得先前配置的过程可视化.可能,退出exec服务脚本可以解决这个问题.

但是,你可以通过这个示例Dockerfile来减少整个过程(和图像):

FROM debian:wheezy

RUN \
  apt-get update && \
  apt-get upgrade -y

ADD https://www.dropbox.com/download?plat=lnx.x86_64 /dropbox.tar.gz
RUN tar xfvz /dropbox.tar.gz && rm /dropbox.tar.gz

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

VOLUME ["/Dropbox"]

CMD /.dropbox-dist/dropboxd
Run Code Online (Sandbox Code Playgroud)

就像这样运行一次:docker -t -h <HOSTNAME> --name dropbox-auth my-dropbox-image.复制auth链接并链接Ctrl-CDropbox.<HOSTNAME>可以是更具描述性的标题,以便您可以更轻松地在Dropbox帐户的安全设置中找到它.

承诺: docker commit dropbox-auth dropbox

然后运行它: docker run -d --name my-dropbox-container dropbox

由于Dropbox在Dropbox主文件夹中存储有关自身的信息,因此无法更改.但是,您可以在上面的所有步骤中使用-v标志(请参阅此处)链接到本地​​文件夹(在容器外部).这将在Linux上100%运行,在Mac OS X上它有点"有时它可以工作,有时它不会".

根据您想要在容器内运行Dropbox的原因,-v标志(通过将主机文件夹与容器文件夹链接)可能正是您正在寻找的,可能导致不需要Dropbox设置.

额外提示:如果要访问正在运行的容器中的shell,从Docker 1.3开始,您不再需要SSH.您可以使用docker exec -it <CONTAINER> /bin/bash归档相同的目标.