在mysql容器中提交数据
我使用官方支持的方法创建了一个mysql容器。我运行映像装载包含sql转储的文件夹,然后在容器中创建了一个新数据库,并将.sql转储导入其中:在mysql容器中提交数据,mysql,linux,database,docker,virtualization,Mysql,Linux,Database,Docker,Virtualization,我使用官方支持的方法创建了一个mysql容器。我运行映像装载包含sql转储的文件夹,然后在容器中创建了一个新数据库,并将.sql转储导入其中: sudo docker run --name mysql-psat1 -v /opt/Projets/P1/sqldumps:/mnt -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest sudo docker exec -it mysql-psat1 bash > mysql -uroot -psecret
sudo docker run --name mysql-psat1 -v /opt/Projets/P1/sqldumps:/mnt -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest
sudo docker exec -it mysql-psat1 bash
> mysql -uroot -psecret -e 'create database liferay_psat1;'
> mysql -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql
然后,我将容器(使用导入的sql)提交为一个新的容器映像
sudo docker commit -m "Imported liferay sql dump" <id-of-the-container> jihedamine/mysql-psat1:v1
我做错了什么
谢谢你的帮助 尝试通过喜欢的容器连接到外部运行的容器:
sudo docker run --name mysql-psat1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest
docker run --rm -i -t -v /opt/Projets/P1/sqldumps:/mnt --link mysql-psat1:mysqlserver mysql:latest /bin/bash
> mysql --host $MYSQLSERVER_PORT_80_TCP_ADDR --port $MYSQLSERVER_PORT_80_TCP_PORT -uroot -psecret -e 'create database liferay_psat1;'
> mysql --host $MYSQLSERVER_PORT_80_TCP_ADDR --port $MYSQLSERVER_PORT_80_TCP_PORT -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql
sudo docker run--name mysql-psat1-e mysql\u ROOT\u PASSWORD=secret-d mysql:latest
docker run--rm-i-t-v/opt/Projets/P1/sqldumps:/mnt--link mysql-psat1:mysqlserver-mysql:latest/bin/bash
>mysql——主机$MYSQLSERVER\u PORT\u 80\u TCP\u ADDR——端口$MYSQLSERVER\u PORT\u 80\u TCP\u PORT-uroot-psecret-e“创建数据库liferay\u psat1;”
>mysql——主机$MYSQLSERVER\u端口\u 80\u TCP\u地址——端口$MYSQLSERVER\u端口\u 80\u TCP\u端口-uroot-psecret liferay\u psat1
然后停止这两个容器并提交名为mysql-psat1的servers容器,官方mysql映像将数据存储在一个卷中。通常,这是需要的,这样您的数据可以在容器的生命周期之外保持,但是数据卷绕过Union文件系统,并且不会提交到映像
您可以通过创建自己的mysql基本映像来完成您想要做的事情,而不需要卷。然后,您可以添加数据并将其提交到图像中,但提交后添加到正在运行的容器中的任何数据都将在容器消失时丢失。基于@dekin研究,我这样做是为了解决问题: Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
构建和运行:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
根据@Robert answer,我最终得到了这个
Dockerfile
:
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
CMD
覆盖对我无效,容器因一个奇怪的错误而停止:
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
我猜原来的CMD
命令做了更多现在缺少的事情(在@robertanswer中),所以我用了不同的方法。
我没有在
最新的版本中尝试,但我认为它应该可以工作。是的,这就是原因。删除mysql映像Dockerfile中的卷声明使更改与提交保持一致。
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.