Docker:使用Docker Toolbox在Windows上共享卷


Docker: Sharing a volume on Windows with Docker Toolbox

我正试图通过Windows上的Docker容器来设置开发人员环境;7电脑。

我已经安装了适用于Windows的Docker工具箱。

我有一张Apache和PHP 5.6的图片,它是:

FROM php:5.6.15-apache
RUN apt-get update && apt-get install -y '
apt-utils vim git php5-mysql php5-memcache php5-memcached php5-intl '
wget
RUN apt-get install libapache2-mod-php5 -y -o Dpkg::Options::="--force-confdef"
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get install libcurl4-gnutls-dev -y
RUN docker-php-ext-install curl
RUN a2enmod rewrite
ENV APACHE_RUN_USER myname
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
EXPOSE 80
COPY php.ini /usr/local/etc/php/php.ini
COPY apache-config.conf /etc/apache2/sites-enabled/000-default.conf
RUN echo "ServerName 127.0.1.1" >> /etc/apache2/apache2.conf

这个图像已经创建,当我在docker quickstart终端中运行"docker images"时,我可以看到它。

在我的apache-config.conf中,我只有一个很小的虚拟主机,只需一个index.php文件就可以访问测试网站。

然后我尝试在Docker快速启动终端中创建容器:

docker run --name=php5.6_container --rm -v "//c/sites:/var/www/html" -p 80:80 -p 8080:8080 php5.6

我得到以下错误:

AH00112: Warning: DocumentRoot [/var/www/html/test] does not exist
AH00112: Warning: DocumentRoot [/var/www/html/test] does not exist
[Tue Dec 08 16:36:37.703143 2015] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) configured -- resuming normal operations
[Tue Dec 08 16:36:37.703733 2015] [core:notice] [pid 1] AH00094: Command line: '
apache2 -D FOREGROUND'

我的音量选项似乎没有被考虑在内。并且不会创建容器。

我可能做错了什么?

有关Windows和Mac的说明,请参阅https://docs.docker.com/engine/userguide/dockervolumes/#mount-主机方向即数据卷。特别是:

如果您在Mac或Windows上使用Docker Machine,您的Docker守护进程对OS X或Windows文件系统的访问权限有限。Docker Machine尝试自动共享您的/Users(OS X)或C:''Users(Windows)目录。

基本上,您需要将站点文件移动到c:'Users'sites之类的位置,然后使用文档中建议的东西进行装载:

docker run --name=php5.6_container --rm -v "/c/Users/sites:/var/www/html" -p 80:80 -p 8080:8080 php5.6
  • 打开"Oracle VM VirtualBox"
  • 一旦"选择默认值",单击"配置"
  • 转到"剪切文件夹"添加所需文件夹
  • 然后通过在控制台中键入重新启动默认值

    码头机器重启默认

步骤1:C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder add default -name $shared_folder -hostpath d:/data

显示共享文件夹:

VBoxManage showvminfo default | less

步骤2(a):mount -t vboxsf -o uid=1000,gid=50 $shared_folder /data

步骤2(b):向boot2docker 添加自动装载

当登录到机器时,通过将以下块添加到文件中来编辑/创建(作为根)/mnt/sda1/var/lib/boot2docker/bootlocal.sh,sda1可能对您有所不同。。。

mkdir -p /data mount -t vboxsf -o uid=1000,gid=50 $shared_folder /data

然后,docker-machine restart default

步骤3:运行容器时添加体积(例如gogs)docker run --name=gogs -rm --net=host -d -v /fuple:/data gogs/gogs

该消息是"WARNING"而非错误消息。你确定你的容器没有创建吗?你用命令"docker ps-a"检查过了吗?

如果消息是问题的根本原因,那么您应该找出容器中不存在/var/www/html/test的原因。如果不需要,您应该将其从apache配置中删除(可能在/etc/apache2/sites-enabled/000-default.conf或/etc/apache2/apache2.conf文件中)

如果需要/var/www/html/test,您可以尝试添加

RUN mkdir /var/www/html/test

在Dockerfile中,以确保该目录存在。

此外,为了尝试调试该问题,您可能希望尝试在不使用卷的情况下运行容器。如果没有错误,那么应该输入容器("docker-exec-it php5.6_container-bash"),以便调试容器内的潜在问题并检查容器的结构。

我认为对于Docker卷选项,不需要双引号:

docker run --name=php5.6_container --rm -v //c/sites:/var/www/html -p 80:80 -p 8080:8080 php5.6

检查它是否工作。我不确定。

请参阅管理容器中的数据中的卷映射示例。