在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