docker - 卷挂载不适用于Digital Ocean

标签 docker nginx docker-compose dockerfile docker-machine

小测试用例:

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在本地使用的原因是使用自动共享文件夹

shared folders

如您在我的Mac上所见,/Users是自动共享的。因此,我启动的任何存在于docker-compose中的/Users项目,卷共享将自动运行。因为来自主机的/Users被共享安装在docker-machine VM内的/Users上。但是,如果我将项目移至/Users的其他文件夹,则其行为将与您现在在 digital ocean 中看到的行为相同。

因此,您唯一可以做的就是在构建过程中将所需的文件复制到Dockerfile中。或将项目复制到远程服务器上并从那里运行

关于docker - 卷挂载不适用于Digital Ocean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328751/

相关文章:

logging - 重新生成Nginx日志

php - xdebug 3 无法在 ubuntu 20.04 中使用 docker

linux - Nginx 请求将一个容器重定向到另一个容器

docker - docker swarm部署过程进行时如何获取详细日志?

git - 设置对 git repo 的只读 http 访问

node.js - 如何配置我的 Nodejs 应用程序以仅响应 SSL 连接?

docker - 在服务器上的docker-compose上使用代理

javascript - 如何将 dockerfile 环境变量传递给node.js 文件?

python - 从源代码构建 Python 和 OpenSSL,但 ssl 模块失败

Docker不绑定(bind)端口