Deniz Güzel
Deniz Güzel

Reputation: 35

Mysql container can not run

I want to make my own mysql container from mysql image. But mysql container can not run. My 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

Who can help me? At the same time mysql should run and restore database. How can I do?

Upvotes: 2

Views: 16802

Answers (3)

Ngugi Kiarie
Ngugi Kiarie

Reputation: 1448

Could be unrelated since I'm using docker-compose and my service is bundled in a laravel project but turns out my problem was trying to define the user as root.

If this doesn't work for you, try getting to the root of the problem by doing docker logs <container ID>. To get the container ID do docker ps -a.

Regards

Upvotes: 0

Deniz G&#252;zel
Deniz G&#252;zel

Reputation: 35

I solved my problem. docker-compose file is;

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"

I used two mysql image.Second one is restoring to first one. It worked for me. Thanks for answers.

Upvotes: 1

Adiii
Adiii

Reputation: 59896

You need some modification in docket file. Whenever face some sort of issue always run your docker with -it instead of -d. I tried to run MySQL from entry point as you mention but have some permission issue ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) and mysql stop check for self. This will work. And also mysql docker version.

check this getting this issue with your configurations.

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"]

For restoredb you can run after bootup or if docker compose put them in command section of yml file.

docker exec -it test bash -c "/usr/sql/restoredb.sh"

Update:

The error you mention happens when password not set. Pls, check ENV value in the container. Its good practice to pass ENV at container runtime so I tried with something like this.

docker run --rm   --name db  -e MYSQL_ROOT_PASSWORD=abc123 -it db

And I don't have your DB restore script. I run a script which just updates time zone.

    #!/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

Here is a screenshot. pls check env and try to connect manually first with mysql -u root -p

enter image description here

update 2 import DB: use this script istead your

#!/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

Sample db import script test.sql

copy it in 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);

Upvotes: 1

Related Questions