【问题标题】:Running a git clone and rsync bash script during a docker compose build在 docker compose build 期间运行 git clone 和 rsync bash 脚本
【发布时间】:2019-09-11 14:03:51
【问题描述】:

docker-compose:

version: '3'
services:
  php:
    build:
      context: ./
      dockerfile: ./Dockerfile
    volumes:
      - ./wordpress:/var/www/html:rw
    restart: always

Dockerfile:

FROM php:7-fpm-alpine

RUN apk add --quiet --no-cache bash git rsync

COPY ./scripts/php/install-wordpress.sh /install-wordpress.sh
RUN chmod +x /install-wordpress.sh \
  && sh /install-wordpress.sh

安装-wordpress.sh:

#!/bin/bash

set -ex

git clone --depth=1 --no-tags https://github.com/roots/bedrock.git /tmp/bedrock

rsync -rp /tmp/bedrock/ /var/www/html/

exec "$@"

当我运行docker-compose build php; docker-compose up -d;然后docker-compose exec php /bin/bashls/var/www/html/ 目录是空的但是bedrock 已被克隆到tmp

【问题讨论】:

    标签: bash docker docker-compose dockerfile


    【解决方案1】:

    如果您在没有 docker-compose 的情况下运行 Docker 映像,它应该可以正常工作。 尝试运行

     docker run --rm --name testc -it your_image bash -c "ls /var/www/html/"
    

    这个问题与volumes: 相关,它隐藏了 Docker 映像中的所有内容。删除

    volumes:
          - ./wordpress:/var/www/html:rw
    
    

    它应该可以正常工作。

    version: '3'
    services:
      php:
        build:
          context: ./
          dockerfile: ./Dockerfile
          restart: always
    

    更新:

    即使挂载主机的空目录也无法查看文件,原因是您在构建时克隆了repo,而不是在运行时。

    要在 Docker 中查看没有 exec 的主机中的文件,您必须在运行时克隆,并且应该将您的脚本从入口点移动。你当前的脚本 install-wordpress.sh 不是入口点,它就像 Dockerfile 的其他 RUN 命令一样。

    FROM php:7-fpm-alpine
    RUN apk add --quiet --no-cache bash git rsync
    COPY install-wordpress.sh /install-wordpress.sh
    RUN chmod +x /install-wordpress.sh 
    entrypoint ["/install-wordpress.sh"]
    CMD ["php-fpm"]
    
    

    入口点.sh

    #!/bin/bash
    
    set -ex
    
    git clone --depth=1 --no-tags https://github.com/roots/bedrock.git /tmp/bedrock
    
    rsync -rp /tmp/bedrock/ /var/www/html/
    
    exec "$@"
    
    

    如果你现在运行

    docker run --rm --name testc -v $PWD/:/var/www/html/ -it your_image 
    
    

    它应该可以正常工作,您将能够看到文件 wordpress 文件以及克隆文件和文件夹。

    version: '3'
    services:
      php:
        build:
          context: ./
          dockerfile: ./Dockerfile
        volumes:
          - ./wordpress:/var/www/html:rw
        restart: always
    
    

    【讨论】:

    • 如果我没有在docker-compose.yml 中提供卷,我如何在不通过 SSH 进入容器的情况下查看克隆文件?另外,我正在使用 compose,因为我计划将其他服务附加到此。通常我会在我的编辑器中打开/wordpress
    • 如果在构建时克隆,您将看不到文件。要查看文件,您应该在运行时克隆它。否则,如果您映射卷,它将覆盖。
    • @AllanThomas 答案已更新。您需要 mofiy 入口点和 dockerfile 才能使其与 wordpress 和 git repo 一起使用
    • 那么我应该先运行build php,然后运行up -d,然后运行run
    • 我发布了两种方法
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2017-02-13
    • 2017-11-05
    相关资源
    最近更新 更多