Docker:在 Windows 上与 Docker 工具箱共享一个卷
Docker: Sharing a volume on Windows with Docker Toolbox
我正在尝试通过我的 Windows 7 计算机上的 Docker 容器设置开发人员环境。
我已经为 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快速启动终端里运行"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'
好像没有考虑我的音量选项。并且没有创建容器。
我可能做错了什么?
我认为 Docker 音量选项不需要双引号:
docker run --name=php5.6_container --rm -v //c/sites:/var/www/html -p 80:80 -p 8080:8080 php5.6
检查它是否正常工作。我不确定。
请参阅 Manage data in containers 处的卷映射示例。
该消息是 "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"),以便调试容器内部的潜在问题并检查容器的结构。
请参阅 https://docs.docker.com/engine/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume 中 Windows 和 Mac 的注释。特别是:
If you are using Docker Machine on Mac or Windows, your Docker daemon has only limited access to your OS X or Windows filesystem. Docker Machine tries to auto-share your /Users (OS X) or C:\Users (Windows) directory.
基本上,您需要将您的站点文件移动到某个地方,例如 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
第 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
登录机器后,edit/create(以 root 身份)/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
- 打开"Oracle VM VirtualBox"
- 一旦 "default is selected" 点击 "configuration"
- 转到 "Sheared Folders" 添加所需的文件夹
然后在您的控制台中输入默认值重新启动
docker-机器重启默认
我正在尝试通过我的 Windows 7 计算机上的 Docker 容器设置开发人员环境。
我已经为 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快速启动终端里运行"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'
好像没有考虑我的音量选项。并且没有创建容器。
我可能做错了什么?
我认为 Docker 音量选项不需要双引号:
docker run --name=php5.6_container --rm -v //c/sites:/var/www/html -p 80:80 -p 8080:8080 php5.6
检查它是否正常工作。我不确定。
请参阅 Manage data in containers 处的卷映射示例。
该消息是 "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"),以便调试容器内部的潜在问题并检查容器的结构。
请参阅 https://docs.docker.com/engine/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume 中 Windows 和 Mac 的注释。特别是:
If you are using Docker Machine on Mac or Windows, your Docker daemon has only limited access to your OS X or Windows filesystem. Docker Machine tries to auto-share your /Users (OS X) or C:\Users (Windows) directory.
基本上,您需要将您的站点文件移动到某个地方,例如 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
第 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
登录机器后,edit/create(以 root 身份)/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
- 打开"Oracle VM VirtualBox"
- 一旦 "default is selected" 点击 "configuration"
- 转到 "Sheared Folders" 添加所需的文件夹
然后在您的控制台中输入默认值重新启动
docker-机器重启默认