【问题标题】:Copy file from host to Docker container by using Docker file error使用 Docker 文件错误将文件从主机复制到 Docker 容器
【发布时间】:2020-01-03 16:02:04
【问题描述】:

我是 Docker 新手。我知道那里有很多答案。我试过这个链接host to container 但我无法解决我的问题。我正在使用 WordPress cli 图像为 WordPress 创建一个 docker。

这里是:

version: '3.1'

services:
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - wordpress_files:/var/www/html
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: user
       WORDPRESS_DB_PASSWORD: password
       WORDPRESS_DB_NAME: wordpressdb

   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: wordpressdb
       MYSQL_USER: user
       MYSQL_PASSWORD: password

volumes:
    wordpress_files:
    db_data:

在上面的代码中,我使用的是与 MySQL 连接的官方 WordPress 图像,它已成功创建。接下来我想在那个 WordPress 镜像中安装 WordPress cli。以下是我找到的安装 WordPress cli 的命令。

echo "Installing WP-CLI"  
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

我直接尝试将上述命令放在 Docker 文件的命令部分。但它失败了。于是我把内容保存在主机的install.sh文件中。

接下来我想将文件传输到 WordPress 映像,安装 WordPress 映像后应触发该文件,并应使用该文件在该映像中安装 cli

这里是我修改的代码:

version: '3.1'

services:
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - wordpress_files:/var/www/html
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: user
       WORDPRESS_DB_PASSWORD: password
       WORDPRESS_DB_NAME: wordpressdb
     COPY /files/install.sh  /var/www/html/   =>modified
     command:                                 =>modified
       /var/www/html/files/install.sh         =>modified
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: wordpressdb
       MYSQL_USER: user
       MYSQL_PASSWORD: password

volumes:
    wordpress_files:
    db_data:

错误:

ERROR: yaml.scanner.ScannerError: while scanning a simple key
  in "./word_press_docker_file.yml", line 18, column 6
could not find expected ':'
  in "./word_press_docker_file.yml", line 19, column 6

但它又失败了。我尝试了几个 Stack Overflow 答案,但无法弄清楚。我尝试了COPY 命令,但失败了。

【问题讨论】:

    标签: wordpress docker docker-compose dockerfile


    【解决方案1】:

    实现此目的的一种方法是通过 Dockerfile。

    您的案例的示例 Dockerfile 可能如下所示:

    FROM wordpress:latest
    RUN cd /tmp && echo "Installing WP-CLI" && curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && chmod +x wp-cli.phar && mv wp-cli.phar /usr/local/bin/wp
    

    然后您可以将其构建为新的自定义图像并在您的 YAML 文件中使用。

    编辑:

    不再允许使用本地图像。因此,您可以使用 docker tag 命令标记图像,然后在 YAML 文件中使用。

    您可以在此处阅读更多相关信息: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

    这里提到了另一种方法: https://hub.docker.com/_/wordpress/

    This image variant does not contain WordPress itself, but instead contains WP-CLI.
    
    The simplest way to use it with an existing WordPress container would be something similar to the following:
    
    $ docker run -it --rm \
        --volumes-from some-wordpress \
        --network container:some-wordpress \
        wordpress:cli user list
    
    Generally speaking, for WP-CLI to interact with a WordPress install, it needs access to the on-disk files of the WordPress install, and access to the database (and the easiest way to accomplish that such that wp-config.php does not require changes is to simply join the networking context of the existing and presumably working WordPress container, but there are many other ways to accomplish that which will be left as an exercise for the reader).
    

    【讨论】:

    • 不再允许使用本地图像。因此,您可以使用 docker tag 命令标记图像,然后在 YAML 文件中使用。
    • 我创建了一个 wordpress_cli_image 。我尝试在 yml 文件中添加图像。进入docker容器后,显示wp not found。你能以 yml 格式显示它吗?如何在我询问的 yml 文件中的上图中使用它。
    【解决方案2】:

    您可以尝试如下使用RUN指令:

    RUN echo "Installing WP-CLI" \
    && curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
    && chmod +x wp-cli.phar \
    && mv wp-cli.phar /usr/local/bin/wp
    

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2021-05-15
      • 2015-07-08
      • 1970-01-01
      • 2018-03-05
      • 2014-05-19
      相关资源
      最近更新 更多