我想在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"]
#!/bin/sh
exec /usr/local/dropBox/.dropBox-dist/dropBoxd
在建立并运行Docker镜像后,DropBox说:
这台电脑没有链接到任何DropBox帐户…
并提供与DropBox帐户关联到当前计算机的链接.
链接后,我看到一个欢迎消息,数据是syncyd里面的/ root / DropBox文件夹.
我提交了docker更改
sudo docker commit `sudo docker ps -l -q` imagename
但是当杀死码头容器并再次运行时DropBox坚持认为:
这台电脑没有链接到任何DropBox帐户…
我确认在容器内,文件夹/ root / DropBox存在,数据在那里,在上一个容器执行期间同步.但是我的容器丢失了到DropBox的链接,需要再次链接.
研究重新启动之间的变化,我发现/root/.dropBox/instance1/hostkeys和/root/.dropBox/instance_db/hostkeys更改.这可能与您使用的Phusion图像有关,尽管我不知道为什么.我的猜测是,这是因为您通过exec运行dropBoxd(因此不使用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
只要运行一次,就可以这样:docker -t -h< HOSTNAME> –name dropBox-auth my-dropBox-image. DropBox链接时复制auth链接和Ctrl-C. < HOSTNAME>可以是更具描述性的标题,以便您可以在DropBox帐户的安全设置中更轻松地找到该标题.
提交:docker commit dropBox-auth dropBox
之后只需运行它:docker run -d –name my-dropBox-container dropBox
由于DropBox在DropBox主文件夹中存储有关本身的信息,因此无法更改.但是,您可以在上述所有步骤中使用-v标志(see here)链接到本地文件夹(容器外部).这将在Linux上工作100%,在Mac OS X上,它是“有时它有效,有时它不”.
根据您希望在容器中运行DropBox的原因,-v标志(通过将主机文件夹与容器文件夹相链接)可能正是您正在寻找的,可能会使DropBox设置不必要.
奖金提示:如果要访问运行容器中的shell,则从Docker 1.3起,您不再需要SSH.您可以使用docker exec -it< CONTAINER> / bin / bash存档同一个目标.