我有一个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!
(我看过的一些帖子不起作用,因为这似乎是Wordpress特有的,而不是Dockerfile COPY本身:)
Dockerfile复制保持子目录结构Docker没有将子目录复制到容器中如何从Dockerfile将文件夹复制到docker镜像?https://www.serverlab.ca/tutorials/containers/docker/how-to-host-your-wordpress-site-with-docker/Wordpress docker复制主题到暴露的文件夹中
今天我遇到了同样的问题。我想在使用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: