小测试用例:
docker-compose.yml
nginx:
image: nginx:1
ports:
- "80:80"
volumes:
- ./testconf:/etc/nginx/conf.d
- ./testhtml:/usr/share/nginx/html
testconf / nginx.conf
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/;
}
}
testhtml / index.html
<!DOCTYPE html>
<html>
<body>
<p>Hello</p>
</body>
</html>
机器创建:
$ docker-machine create --driver digitalocean --digitalocean-access-token xxxx --digitalocean-region "ams3" edgee
push :
$ eval $(docker-machine env edgee)
$ docker-compose up
$ curl $(docker-machine ip edgee)
当我查看容器内部时,应该挂载的文件不存在。这在本地工作,可以在机器和virtualbox上工作,但是在digitalocean上不行吗?
最佳答案
这样的期望是错误的。您的机器和 digital ocean 不共享文件夹。当您有以下数量时
volumes:
- ./testconf:/etc/nginx/conf.d
- ./testhtml:/usr/share/nginx/html
并且您当前的文件夹是
/user/name/projects
,然后使用docker指向您的 digital ocean 进行docker-compose up
,将告诉远程docker进行映射digital ocean 服务器上的
/user/name/projects/testhtml
文件夹到容器内的/usr/share/nginx/html
。主机上没有此类文件夹,因此将创建并共享一个空白文件夹。现在,它可以通过virtualbox在本地使用的原因是使用自动共享文件夹
如您在我的Mac上所见,
/Users
是自动共享的。因此,我启动的任何存在于docker-compose
中的/Users
项目,卷共享将自动运行。因为来自主机的/Users
被共享安装在docker-machine VM内的/Users
上。但是,如果我将项目移至/Users
的其他文件夹,则其行为将与您现在在 digital ocean 中看到的行为相同。因此,您唯一可以做的就是在构建过程中将所需的文件复制到Dockerfile中。或将项目复制到远程服务器上并从那里运行
关于docker - 卷挂载不适用于Digital Ocean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328751/