卷安装不适用于数字海洋

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