• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

docker - Docker:当Dockerfile位于子目录中时使用COPY

[复制链接]
菜鸟教程小白 发表于 2022-8-3 10:11:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用multiple dockerfiles构建一个应用程序(每个服务一个)。我的应用程序的目录结构如下:

app
├── dockerfiles
│   ├── webserver
│   │   └── Dockerfile
│   └── database
│       └── Dockerfile
├── public
    └── <frontend>
├── db
    └── <data>
  [...]
├── LICENSE
├── README.md
└── docker-compose.yml

在我的网络服务器的Dockerfile中,我想使用COPY命令复制现有代码:
# Dockerfile
COPY ./public /var/www/html

我想使用我的docker-compose.yml文件部署该应用程序:
# docker-compose.yml
version: "3"
services:
   webserver:
      build: ./dockerfiles/webserver
      image: webserver:php-apache

但是,当我从工作目录(docker-compose)运行app时,出现以下错误:
Building webserver
Step 1/2 : FROM php:7.1.11-apache-jessie
 ---> cb6a5015ad72
Step 2/2 : COPY ./public /var/www/html
Service 'webserver' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder193736188/public: no such file or directory

如果将网络服务器的Dockerfile移至应用程序的根目录,此错误将消失,因此我知道这是由路径或构建上下文问题引起的。

知道了这一点,我们可以通过以下两种方法之一解决问题:

(1)对整个应用程序使用一个Dockerfile(在应用程序的根目录中),或者
app
└── Dockerfile

(2)为每个服务使用多个Dockerfiles(在应用程序的根目录中)。
app
├── Dockerfile.webserver
└── Dockerfile.database

这些解决方案很糟糕,因为对所有内容使用一个dockerfile /容器不是best practice(1),并且以这种方式组织多个dockerfile看起来很混乱(2)。

所以,我的问题是:

我们如何在不更改原始目录结构的情况下解决此问题?
  • 需要对dockerfile,docker-compose.yml或基本运行时命令进行哪些更改?
  • 是否有更好的方法来组织所有内容?
  • WORKDIR命令呢?

  • 理想情况下,最好的解决方案应该同时适用于开发(本地)和生产(远程)环境,因此让我们暂时避免批量生产...



    Best Answer-推荐答案


    您要做的就是在docker-compose.yml文件的build部分中添加context: .dockerfile,以便您的服务了解完整的目录结构。

    # docker-compose.yml
    version: "3"
    services:
      webserver:
        build:
          context: .
          dockerfile: ./dockerfiles/webserver/Dockerfile
        image: webserver:php-apache
    

    关于docker - Docker:当Dockerfile位于子目录中时使用COPY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785706/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap