在Windows 7上的Docker-compose:如何在使用yaml文件时导入数据库转储?
我从这里开始: https : //docs.docker.com/compose/wordpress/
我在Windows 7上运行得很好
version: '2' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress phpmyadmin: container_name: phpmyadmin depends_on: - db image: phpmyadmin/phpmyadmin:latest environment: MYSQL_ROOT_PASSWORD: "mysql_root_password" PMA_ARBITRARY: 1 restart: always ports: - 8080:80 volumes: - /sessions volumes: db_data:
我的问题是:如何从Windows Machime导入数据库转储? 我的目标是在本地生产的转储(我已经在我的docker-compose.yaml文件的同一个文件夹中有转储)。
如果你打开MySQL容器,创build数据库并导入数据,那么你的第一个问题就是修复。
关于第二个, I'm not able to login from within phpMyAdmin
,因为我没有看到您docker-compose.yml
上列出的服务,我会build议安装和configuration文件在phpmyadmin 。 非常重要的是在这里读取ENVvariables,因为您需要设置它们以允许phpMyAdmin容器从/向MySQL容器读取/写入。
Ex(从这里 ):
phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin environment: - PMA_ARBITRARY=1 restart: always ports: - 8080:80 volumes: - /sessions
您在Dockerfile中缺less这部分内容,或者您还没有得到Docker的工作方式,因此build议您阅读一下。
UPDATE
由于答案是不再与phpMyAdmin相关,现在变成在Windows下的docker volumes
这是更新的答案。
在Windows上挂载卷像Linux一样工作,例如:
php-fpm: build: docker/php-fpm volumes: - ./sources:/data/www
上面的服务定义可以在两个操作系统上运行,你可以在这里试试。 我正在使用最新的Docker for Windows(testing版标记为RCXX)
现在,针对您的情况的解决方法可以是安装具有.sql
转储文件的主机卷,也可以使用Docker的COPY
命令将该文件移动到容器中,然后使用RUN
或bash脚本将其导回到数据库。
一种可以做到这一点的方法是在使用官方的mysql映像时,将一个包含转储的文件夹挂载到目录/docker-entrypoint-initdb.d/
。
这是在团队中工作的一个很好的解决scheme,每个人都应该使用相同的基本数据库。 您可以在文档中阅读更多。 这只会在容器的第一次运行时发生。 如果删除容器,它将会重新导入。 这也有它的用途。
更多的时候,我会像其他一些答案一样提示:
docker-compose exec db mysql -u root -p DB_NAME < DUMP_FILE_IN_CONTAINER
需要注意的是,您仍然需要将转储文件安装在容器中! 它不会在主机上的文件工作!
您不一定需要挂载整个文件夹(尽pipe您可以 – 上述文件夹中的所有脚本都将按字母顺序执行)。 你可以像这样挂载你的转储文件:
services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql - ./path/to/dump/on/host.sql:/docker-entrypoint-initdb.d/anyname.sql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress