卷安装不适用于数字海洋
Volume mounts not working with digital ocean
小测试用例:
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
推动:
$ eval $(docker-machine env edgee)
$ docker-compose up
$ curl $(docker-machine ip edgee)
当我查看容器内部时,应该安装的文件不在那里。这在本地工作,它适用于机器和 virtualbox,但它不适用于 digitalocean?
这是一个错误的期望。您的 machine 和您的数字海洋不共享文件夹。当您的数量低于
volumes:
- ./testconf:/etc/nginx/conf.d
- ./testhtml:/usr/share/nginx/html
你当前的文件夹是 /user/name/projects
然后做 docker-compose up
和 docker 指向你的数字海洋会告诉远程 docker 映射
数字海洋服务器上的 /user/name/projects/testhtml
文件夹到容器内的 /usr/share/nginx/html
。主机上没有这样的文件夹,因此将创建一个空白文件夹并共享。
现在它在你的本地 virtualbox 上工作的原因是使用了自动共享文件夹
如您所见,我的 mac /Users
是自动分享的。因此,我启动的任何 docker-compose
项目都存在于 /Users
中,卷共享将自动运行。因为来自主机的 /Users
被共享安装在 docker-machine VM 内的 /Users
上。但是,如果我将项目移动到 /Users
的其他文件夹,那么行为将与您现在在数字海洋中看到的相同。
所以你唯一能做的就是在构建过程中将你想要的文件复制到 Dockerfile 中。或者将项目复制到远程服务器上并从那里 运行
Tarun 的回答让我更好地理解了这个问题。解决方法是复制构建中的文件,将其添加到您的 Dockerfile 中:
COPY local/path /path/in/server
在 docker-compose.yaml 文件中,将卷部分添加到 Web 应用程序服务:
volumes:
- /usr/src/app/donare/static
如果像我一样你有 nginx 服务,从网络应用程序服务中获取卷以让 nginx 提供文件:
volumes_from:
- web
小测试用例:
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
推动:
$ eval $(docker-machine env edgee)
$ docker-compose up
$ curl $(docker-machine ip edgee)
当我查看容器内部时,应该安装的文件不在那里。这在本地工作,它适用于机器和 virtualbox,但它不适用于 digitalocean?
这是一个错误的期望。您的 machine 和您的数字海洋不共享文件夹。当您的数量低于
volumes:
- ./testconf:/etc/nginx/conf.d
- ./testhtml:/usr/share/nginx/html
你当前的文件夹是 /user/name/projects
然后做 docker-compose up
和 docker 指向你的数字海洋会告诉远程 docker 映射
数字海洋服务器上的 /user/name/projects/testhtml
文件夹到容器内的 /usr/share/nginx/html
。主机上没有这样的文件夹,因此将创建一个空白文件夹并共享。
现在它在你的本地 virtualbox 上工作的原因是使用了自动共享文件夹
如您所见,我的 mac /Users
是自动分享的。因此,我启动的任何 docker-compose
项目都存在于 /Users
中,卷共享将自动运行。因为来自主机的 /Users
被共享安装在 docker-machine VM 内的 /Users
上。但是,如果我将项目移动到 /Users
的其他文件夹,那么行为将与您现在在数字海洋中看到的相同。
所以你唯一能做的就是在构建过程中将你想要的文件复制到 Dockerfile 中。或者将项目复制到远程服务器上并从那里 运行
Tarun 的回答让我更好地理解了这个问题。解决方法是复制构建中的文件,将其添加到您的 Dockerfile 中:
COPY local/path /path/in/server
在 docker-compose.yaml 文件中,将卷部分添加到 Web 应用程序服务:
volumes:
- /usr/src/app/donare/static
如果像我一样你有 nginx 服务,从网络应用程序服务中获取卷以让 nginx 提供文件:
volumes_from:
- web