我想知道docker-compose如何精确处理环境变量。
services:
wp:
image: wordpress:latest
container_name: "wp"
restart: unless-stopped
links:
- wpdb
environment:
- TZ=Europe/Berlin
- WORDPRESS_DB_HOST=wpdb:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=password
- WORDPRESS_DB_NAME=wp
volumes:
- ./data:/var/www/html
labels:
- "traefik.enable=true"
- "traefik.backend=wp"
- "traefik.frontend.rule=Host:MASKED"
- "traefik.port=80"
- "traefik.docker.network=web"
networks:
- internal
- web
wpdb:
image: mariadb:latest
restart: unless-stopped
container_name: "wpdb"
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=wp
networks:
- internal
labels:
- "traefik.enable=false"
volumes:
- ./sql:/var/lib/mysql
volumes:
data:
sql:
networks:
web:
external: true
internal:
撰写文件效果很好。容器将被创建并完美运行。
但是当我更改默认值时:WORDPRESS_DB_PASSWORD =密码和MYSQL_PASSWORD =密码。
Wordpress容器引发拒绝用户访问。我还试图杀死容器和卷。
希望有人对我有所提示。
答案 0 :(得分:0)
您应该执行docker-compose down -v
,这将删除在volumes部分中声明的命名卷。唯一的缺点是您将第一次丢失该服务创建的所有数据。
这是我如何复制它-
使用您的撰写文件作为参考,并且第一次使用您提到的默认密码。服务正常运行,我安装了该服务并执行Ctrl+C
以关闭该服务。因此,所有MYSQL数据都写入名为卷的sql中。
执行Ctrl+C
或docker-compose down
时,它只会删除服务中定义的容器和网络。 不是卷。详细了解here
现在,当您更改密码并重新启动服务时,它仍然使用具有您旧密码的旧卷。
所以也使用docker-compose down -v
来删除卷并尝试一下。
以下是我复制它的步骤
Ctrl + C停止所有服务,然后更新docker-compose.yml以更新密码,然后再次执行docker-compose up
以获取拒绝访问错误。
也执行docker-compose down -v
来清理所有卷,然后执行docker-compose up
执行docker-compose down -v
时,您将丢失先前服务创建的所有数据。谨慎使用。