Ale*_*x H 23 docker dockerfile docker-compose
我有一个docker-compose-staging.yml文件,我用它来定义一个PHP应用程序.我已经定义了应用程序代码所在的数据卷容器(app),并使用volumes_from与其他容器共享.
泊坞窗 - 撰写-staging.yml:
version: '2'
services:
nginx:
build:
context: ./
dockerfile: docker/staging/nginx/Dockerfile
ports:
- 80:80
links:
- php
volumes_from:
- app
php:
build:
context: ./
dockerfile: docker/staging/php/Dockerfile
expose:
- 9000
volumes_from:
- app
app:
build:
context: ./
dockerfile: docker/staging/app/Dockerfile
volumes:
- /var/www/html
entrypoint: /bin/bash
Run Code Online (Sandbox Code Playgroud)
此特定的docker-compose-staging.yml用于将应用程序部署到云提供程序(DigitalOcean),而app容器的Dockerfile具有COPY命令,该命令将文件夹从本地目录复制到配置中定义的卷.
泊坞窗/分期/应用/ Dockerfile:
FROM php:7.1-fpm
COPY ./public /var/www/html/public
COPY ./code /var/www/html/code
Run Code Online (Sandbox Code Playgroud)
这在我第一次构建和部署应用程序时有效.我的公共和代码目录中的代码在远程服务器上存在且正确.我使用以下命令进行部署:
docker-compose -f docker-compose-staging.yml up -d
Run Code Online (Sandbox Code Playgroud)
但是,接下来我尝试将文件添加到我的本地公共目录,然后运行以下命令来重建更新的代码:
docker-compose -f docker-compose-staging.yml build app
Run Code Online (Sandbox Code Playgroud)
此重建的输出表明COPY命令成功:
Building app
Step 1 : FROM php:7.1-fpm
---> 6ed35665f88f
Step 2 : COPY ./public /var/www/html/public
---> 4df40d48e6a5
Removing intermediate container 7c0fbbb7f8b6
Step 3 : COPY ./code /var/www/html/code
---> 643d8745a479
Removing intermediate container cfb4f1a4f208
Successfully built 643d8745a479
Run Code Online (Sandbox Code Playgroud)
然后我使用以下部署:
docker-compose -f docker-compose-staging.yml up -d
Run Code Online (Sandbox Code Playgroud)
使用以下输出:
Recreating docker_app_1
Recreating docker_php_1
Recreating docker_nginx_1
Run Code Online (Sandbox Code Playgroud)
但是,当我登录到远程容器时,文件更改不存在.
我对Docker比较陌生,所以我不确定我是否误解了这个过程的任何部分!任何指导将不胜感激.
Har*_*ria 12
这是因为缓存.
跑,
docker-compose build --no-cache
Run Code Online (Sandbox Code Playgroud)
这将在不使用任何缓存的情况下重建图像.
然后,
docker-compose -f docker-compose-staging.yml up -d
Run Code Online (Sandbox Code Playgroud)
小智 8
我一直在苦苦挣扎,因为迁移没有被检测到也没有完成。找到这个线程并注意到根本原因实际上是容器中的文件未更新。上面建议的强制重新创建解决方案为我解决了这个问题,但我发现必须尝试记住何时执行和何时不执行非常麻烦。例如,Vue 相关文件似乎工作得很好,但 Django 相关文件却不行。
所以我想为什么不尝试调整 Docker 文件来清理复制之前的先前文件:
RUN rm -rf path/to/your/app
COPY . path/to/your/app
Run Code Online (Sandbox Code Playgroud)
工作起来就像一个魅力。现在它是构建的一部分,您所需要做的就是再次运行 docker-compose up -d --build 。文件是最新的,您可以运行 make migrations 并针对您的容器进行迁移。
小智 6
由于共享卷,我遇到了同样的问题。对我来说,解决方案是使用以下命令删除共享容器:
docker volume rm [VOLUME_ID]
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令在“安装”部分找到卷 ID 或名称:
docker inspect [CONTAINER_ID]
Run Code Online (Sandbox Code Playgroud)
只是将其留在这里,以便我两周后返回此页面。
您可能不想docker system prune -f在这个块中使用。
docker-compose down --rmi all -v \
&& docker-compose build --no-cache \
&& docker-compose -f docker-compose-staging.yml up -d --force-recreate
Run Code Online (Sandbox Code Playgroud)
小智 -5
您正在尝试使用新映像中的内容更新现有卷,但这不起作用。
https://docs.docker.com/engine/tutorials/dockervolumes/#/data-volumes
状态:
Changes to a data volume will not be included when you update an image.
| 归档时间: |
|
| 查看次数: |
16069 次 |
| 最近记录: |