提问者:小点点

如何使用Dockerfile将本地wp内容文件复制到Wordpress容器


我有一个Wordpress容器,我想在启动时将本地文件夹(包含文件)复制到该容器

我在文件夹中有本地文件:

/html/wp-content/plugins
/html/wp-content/themes
/html/wp-content/uploads

我有一个Dockerfile:

FROM wordpress

COPY ./html/wp-content/plugins/ /var/www/html/wp-content/plugins
COPY ./html/wp-content/themes/ /var/www/html/wp-content/themes
COPY ./html/wp-content/uploads/ /var/www/html/wp-content/uploads

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]

尽管COPY正在成功(构建通过),但文件并未显示在这些目标文件夹中。

如果我将目标文件夹更改为 /html之前的任何路径,例如,如果我将目标 /var或 /var/www,则文件复制,我可以在容器中看到它们。

我在这里查看了这篇旧文章,其中提到 /html文件夹实际上是在启动时挂载为卷的,因此我需要先将文件复制到这个文件夹中

/usr/src/wordpress/wp-content

然后在启动时,这些文件夹将自动复制到 /var/www/html/wp-content/.(这可以解释为什么直接复制似乎不起作用)

我也试过,虽然我的本地文件夹确实被复制到这些文件夹中(我可以在容器中看到它们),但它们在启动时不会复制到 /var/www/html/content!

  1. 是否可以通过dockerfile将本地文件直接复制到 /var/www/html文件夹中?
  2. 如果没有,我如何确保如果复制到 /usr/src/wordpress/wp-content,文件夹将在启动时复制到 /var/www/html/wp-content?

(我看过的一些帖子不起作用,因为这似乎是Wordpress特有的,而不是Dockerfile COPY本身:)

Dockerfile复制保持子目录结构Docker没有将子目录复制到容器中如何从Dockerfile将文件夹复制到docker镜像?https://www.serverlab.ca/tutorials/containers/docker/how-to-host-your-wordpress-site-with-docker/Wordpress docker复制主题到暴露的文件夹中


共1个答案

匿名用户

今天我遇到了同样的问题。我想在使用COPY构建图像时添加主题。然而,它没有起作用。这是因为我已经将我的wp-content文件夹设置为卷。看来你不能复制到卷中。

以下链接中的讨论帮助我意识到这一点:

https://github.com/docker-library/wordpress/issues/146

下面我添加了我的WordPres Dockerfile和docker-comort文件。注释掉卷后,一切都按预期工作。

我真的希望两年后你不再需要它了,哈哈。

参考:https://docs.docker.com/samples/wordpress/

Dockerfile

FROM wordpress:latest

WORKDIR /var/www/html

COPY ./wp-content/ ./wp-content/
RUN chmod -R 755 ./wp-content/


docker-comp. yml

version: "3"
services:
  db:
    build:
      context: .
      dockerfile: ./compose/local/db/Dockerfile
    image: new_db_image_name
    container_name: new_db_image_name
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    build:
      context: .
      dockerfile: ./compose/local/wordpress/Dockerfile
    image: new_wordpress_image_name
    container_name: new_wordpress_image_name
#    volumes:
#      - wp-content:/var/www/html/wp-content
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress

volumes:
  db_data:
#  wp-content: