首页 > 解决方案 > 在 Dockerfile 中下载并解压文件

问题描述

我对 Docker 比较陌生,并试图设置一台具有 nginx、MariaDB 和 PHP-fpm 的机器。到目前为止,大多数事情似乎都有效,除了一个:在执行期间docker-compose up我想下载一个外部文件并解压缩它。初始化成功后,我想访问提取的文件。但是,如果我检查目标目录的内容,它是空的。

我的 Dockerfile:

FROM php:7.4-fpm-alpine

[...]

WORKDIR /app

RUN set -ex; \
    curl -o app.tar -fSL "https://www.example.org/app.tar"; \
    tar -xvf app.tar; \
    chown -R www-data:www-data .; \
    rm woltlab_suite.tar

CMD ["php-fpm"]

EXPOSE 9000

运行docker-compose up时它会记录以下内容:

Step 7/10 : WORKDIR /app
 ---> Running in b5cd78d398fe
Removing intermediate container b5cd78d398fe
 ---> 8cf4da3b7f31
Step 8/10 : RUN set -ex;     curl -o app.tar -fSL "https://www.example.org/app.tar";     tar -xvf app.tar;     chown -R www-data:www-data .;     rm app.tar
 ---> Running in 8cbc64e06214
+ curl -o app.tar -fSL https://www.example.org/app.tar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5394k  100 5394k    0     0  47.4M      0 --:--:-- --:--:-- --:--:-- 47.4M
+ tar -xvf app.tar
file1.ext
file2.ext
file3.ext
file4.ext
file5.ext
file6.ext
file7.ext
+ chown -R www-data:www-data .
+ rm app.tar
Removing intermediate container 8cbc64e06214

我想,它与容器的移除有关,因为它已经完成了?

码头工人-compose.yml:

version: '3'

services:
  mariadb:
    container_name: app_mariadb
    build:
      context: ./docker/mariadb
    environment:
      - MYSQL_DATABASE=${DATABASE_NAME}
      - MYSQL_USER=${DATABASE_USER}
      - MYSQL_PASSWORD=${DATABASE_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD}
    volumes:
      - ./docker/mariadb/data:/var/lib/mysql

  php-fpm:
    container_name: app_php
    volumes:
      - ./src:/app/
    build:
      context: ./docker/php-fpm
    depends_on:
      - mariadb

  nginx:
    container_name: app_nginx
    volumes:
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/sites/:/etc/nginx/sites-available
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d
      - ./docker/nginx/log:/var/log/nginx/
      - ./src:/app/:ro
    build:
      context: ./docker/nginx
    depends_on:
      - php-fpm
    ports:
      - "8080:80"
      - "8443:443"

标签: dockerdocker-composedockerfile

解决方案


推荐阅读