我想从mysql映像创建自己的mysql容器。但是mysql容器无法运行。 我的Dockerfile;
FROM mysql
ENV MYSQL_ROOT_PASSWORD=pass
RUN mkdir /usr/sql
RUN chmod 644 /usr/sql
ADD Tedam_Master.sql /usr/sql/
ADD restoredb.sh /usr/sql/
ADD entrypoint.sh /usr/sql
RUN chmod +x /usr/sql/restoredb.sh
RUN chmod +x /usr/sql/entrypoint.sh
EXPOSE 3306
WORKDIR /usr/sql/
ENTRYPOINT entrypoint.sh
entypoint.sh;
/usr/sql/restoredb.sh && /etc/init.d/mysql start
restoredb.sh;
sleep 10s
echo “Starting database import!”
mysql -u root -p$MYSQL_ROOT_PASSWORD -e “CREATE DATABASE mydb”
mysql -u root -p$MYSQL_ROOT_PASSWORD -D mydb< /usr/sql/Tedam_Master.sql
谁能帮帮我?同时mysql应该运行并恢复数据库。我该怎么办?
答案 0 :(得分:0)
您需要在docket文件中进行一些修改。每当遇到某种问题时,总是使用-it代替-d运行docker。
我提到你从入口点运行MySQL但是有一些权限问题ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
和mysql停止检查自己。这会奏效。还有mysql docker version。
检查这会导致您的配置出现此问题。
https://github.com/docker-library/mysql/issues/302
FROM mysql:5.5
ENV MYSQL_ROOT_PASSWORD=pass
RUN mkdir /usr/sql
RUN chmod 644 /usr/sql
RUn usermod -d /var/lib/mysql/ mysql
ADD Tedam_Master.sql /usr/sql/
ADD restoredb.sh /usr/sql/restoredb.sh
ADD entrypoint.sh /usr/sql/entrypoint.sh
RUN chmod +x /usr/sql/restoredb.sh
RUN chmod +x /usr/sql/entrypoint.sh
EXPOSE 3306
WORKDIR /usr/sql/
# ENTRYPOINT ["/usr/sql/entrypoint.sh"]
CMD ["mysqld"]
对于restoredb,您可以在启动后运行,或者如果docker compose将它们放在yml文件的命令部分中。
docker exec -it test bash -c "/usr/sql/restoredb.sh"
<强>更新强>
如果未设置密码,则会出现错误。请检查容器中的ENV值。它是在容器运行时传递ENV的好习惯,所以我尝试了类似的东西。
docker run --rm --name db -e MYSQL_ROOT_PASSWORD=abc123 -it db
我没有你的数据库恢复脚本。我运行一个只更新时区的脚本。
#!/bin/sh
echo '********Welcome to Docker*******'
echo '********Booting up and connect db container time:20s*******'
sleep 10s
DBSERVER=localhost
USER=root
PASS=pass
MYSQL_CONN="-h${DBSERVER} -u${USER} -p${PASS}"
SQL="SET GLOBAL time_zone='US/Eastern'"
if mysql ${MYSQL_CONN} -ANe"${SQL}"; then
SQL="SELECT @@global.time_zone"
res=`mysql ${MYSQL_CONN} -ANe "${SQL}"`
echo "Time zone update to" $res ;
else
echo "Failed to update timezone check log"
fi
这是截图。请检查环境并尝试首先手动连接mysql -u root -p
更新2导入数据库:使用此脚本而不是
#!/bin/sh
sleep 10s
DBSERVER=localhost
USER=root
PASS=27940001
MYSQL_CONN="-h${DBSERVER} -u${USER} -p${PASS}"
SQL="create database testdb"
if mysql ${MYSQL_CONN} -ANe"${SQL}"; then
SQL="show databases"
res=`mysql ${MYSQL_CONN} -ANe "${SQL}"`
echo "Database created list of DB's is " $res ;
mysql -u root -p27940001 -h localhost testdb < test.sql
else
echo "Failed to to create db"
fi
示例数据库导入脚本test.sql
将其复制到dockerfile
copy test.sql /usr/sql/test.sql
--
-- Database: `samplevideo_db`
--
-- --------------------------------------------------------
--
-- Table structure for table `user_details`
--
CREATE TABLE IF NOT EXISTS `user_details` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`first_name` varchar(50) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`status` tinyint(10) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10001 ;
--
-- Dumping data for table `user_details`
--
INSERT INTO `user_details` (`user_id`, `username`, `first_name`, `last_name`, `gender`, `password`, `status`) VALUES
(1, 'rogers63', 'david', 'john', 'Female', 'e6a33eee180b07e563d74fee8c2c66b8', 1),
(2, 'mike28', 'rogers', 'paul', 'Male', '2e7dc6b8a1598f4f75c3eaa47958ee2f', 1),
(3, 'rivera92', 'david', 'john', 'Male', '1c3a8e03f448d211904161a6f5849b68', 1),
(4, 'ross95', 'maria', 'sanders', 'Male', '62f0a68a4179c5cdd997189760cbcf18', 1),
(5, 'paul85', 'morris', 'miller', 'Female', '61bd060b07bddfecccea56a82b850ecf', 1),
(6, 'smith34', 'daniel', 'michael', 'Female', '7055b3d9f5cb2829c26cd7e0e601cde5', 1),
(7, 'james84', 'sanders', 'paul', 'Female', 'b7f72d6eb92b45458020748c8d1a3573', 1),
(8, 'daniel53', 'mark', 'mike', 'Male', '299cbf7171ad1b2967408ed200b4e26c', 1),
(9, 'brooks80', 'morgan', 'maria', 'Female', 'aa736a35dc15934d67c0a999dccff8f6', 1),
(10, 'morgan65', 'paul', 'miller', 'Female', 'a28dca31f5aa5792e1cefd1dfd098569', 1);
答案 1 :(得分:0)
我解决了我的问题。 docker-compose文件是;
version: "2"
services:
mysql1:
build:
context: .
image: my-mysql:1.0
container_name: mysql1
hostname: mysql1
environment:
- 'MYSQL_ROOT_PASSWORD=pass'
- 'MYSQL_DATABASE=test'
ports:
- '3306:3306'
mysqlinit:
image: mysql:latest
volumes:
- ./Tedam_Master.sql:/usr/sql/Tedam_Master.sql
command: bash -c "sleep 15s && mysql -h mysql1 -uroot -ppass --force test < /usr/sql/Tedam_Master.sql"
我使用了两个mysql镜像。第二个是恢复到第一个。它对我有用。谢谢你的回答。