Size: a a a

Docker — русскоговорящее сообщество

2020 February 24

I

Igor in Docker — русскоговорящее сообщество
Коллеги, подскажите кто знает такой вопрос:
есть docker-compose и Dockerfile для mysql:latest (https://hub.docker.com/_/mysql) ,
задача: при билде image для mysql мне надо не просто залить дамп, а сначало скачать его wget'ом, потом залить и, в идеале, прогнать какой-нибудь SHOW TABLES дабы удостовериться что дамб нормально залился,
я пробовал 2 пути:
1) расшаривал в docker-compose volume в /docker-entrypoint-initdb.d/ со скриптом который делает последовательность из wget дампа -> пытается его залить -> SHOW TABLES.
Этот способ не работает, (видимо) потому что на момент исполнения wget - его не существует в системе. Если я пропишу RUN apt-get install wget в Dockerfile, эта конуструкция всё равно будет исполняться после wget, а значит оно не сработает

2) добавлял в Dockerfile конструкцию типа COPY get_dump.sh и RUN get_dump.sh, но этот способ тоже фейлился (видимо) потому что mysql:latest сделан таким образом что сервер стартует в конце исполнения Dockerfile

как поступить?
источник

AE

A E in Docker — русскоговорящее сообщество
Igor
Коллеги, подскажите кто знает такой вопрос:
есть docker-compose и Dockerfile для mysql:latest (https://hub.docker.com/_/mysql) ,
задача: при билде image для mysql мне надо не просто залить дамп, а сначало скачать его wget'ом, потом залить и, в идеале, прогнать какой-нибудь SHOW TABLES дабы удостовериться что дамб нормально залился,
я пробовал 2 пути:
1) расшаривал в docker-compose volume в /docker-entrypoint-initdb.d/ со скриптом который делает последовательность из wget дампа -> пытается его залить -> SHOW TABLES.
Этот способ не работает, (видимо) потому что на момент исполнения wget - его не существует в системе. Если я пропишу RUN apt-get install wget в Dockerfile, эта конуструкция всё равно будет исполняться после wget, а значит оно не сработает

2) добавлял в Dockerfile конструкцию типа COPY get_dump.sh и RUN get_dump.sh, но этот способ тоже фейлился (видимо) потому что mysql:latest сделан таким образом что сервер стартует в конце исполнения Dockerfile

как поступить?
Ну а что в логах?
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Ну а что в логах?
> CONTAINER ID                                                       IMAGE                                                                     COMMAND                          CREATED             STATUS                      PORTS               NAMES
ba5e9fe   "/bin/sh -c ./set_mysql_db.sh"   17 minutes ago      Exited (1) 16 minutes ago                       compassionate_edison

при попытке в цикле прогнать элементарное >mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h127.0.0.1 -e "SHOW DATABASES;" || true

(дабы удостовериться что mysql стартанул)
.
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
источник

AE

A E in Docker — русскоговорящее сообщество
Так у вас сервер даже не стартует, что вы хотите
источник

AI

Arseniy Ivanov in Docker — русскоговорящее сообщество
помогите прибить контейнер, я не понимаю, почему он не сдох еще...
sudo docker system prune --all
не помогло. все умерли, а один единственный висит
источник

AE

A E in Docker — русскоговорящее сообщество
Arseniy Ivanov
помогите прибить контейнер, я не понимаю, почему он не сдох еще...
sudo docker system prune --all
не помогло. все умерли, а один единственный висит
Он запущен? Сначала застопить надо
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Так у вас сервер даже не стартует, что вы хотите
я слегка новичок в докерах, но я так понял mysql:latest устроен таким образом что он стартует через wrapper в конце исполнения dockerfile, то есть усли я элементароно убираю последний скрипт с ожиданием старта демона - он успешно статует
источник

I

Igor in Docker — русскоговорящее сообщество
Arseniy Ivanov
помогите прибить контейнер, я не понимаю, почему он не сдох еще...
sudo docker system prune --all
не помогло. все умерли, а один единственный висит
сначало stop потом prune -a
источник

AI

Arseniy Ivanov in Docker — русскоговорящее сообщество
Igor
сначало stop потом prune -a
спасиб тебе мил человек
источник

AI

Arseniy Ivanov in Docker — русскоговорящее сообщество
помогло
источник

AE

A E in Docker — русскоговорящее сообщество
Igor
я слегка новичок в докерах, но я так понял mysql:latest устроен таким образом что он стартует через wrapper в конце исполнения dockerfile, то есть усли я элементароно убираю последний скрипт с ожиданием старта демона - он успешно статует
Судя по логу, он не стартовал
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Судя по логу, он не стартовал
да, в этом и головоломка. Если тупо закомментровать RUN ./set_mysql_db.sh (в котором тупое ожидание старта демона), контейнер старутет нормально:
total 4.0K
-rwxr-xr-x 1 root root 1.1K Feb 23 21:32 set_mysql_db.sh
Removing intermediate container b7d88594f129
---> 02a002d1d3a2
Successfully built 02a002d1d3a2
Successfully tagged by-dev_db:latest
Creating by-dev_db_1 ... done
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Судя по логу, он не стартовал
MBR13-is:britainyesterday ishkodyrev$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
59347fcbceb7        by-dev_db           "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   by-dev_db_1
источник

AE

A E in Docker — русскоговорящее сообщество
Вот после старта и заливайте бэкап
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Вот после старта и заливайте бэкап
во! а как это сделать учитывая что конейнер поднимается docker-compose-ом?
источник

I

Igor in Docker — русскоговорящее сообщество
как грамотно вызвать этот скрипт с wget+mysql
источник

AE

A E in Docker — русскоговорящее сообщество
Igor
во! а как это сделать учитывая что конейнер поднимается docker-compose-ом?
Entrypoint
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Entrypoint
а разве entrypoint не перетрёт дефолтовый entrypoint этого imageб который и есть wrapper запускающий mysql демон?
источник

AE

A E in Docker — русскоговорящее сообщество
Вы можете использовать свой entrypoint или cmd
источник

I

Igor in Docker — русскоговорящее сообщество
A E
Вы можете использовать свой entrypoint или cmd
попробовал. Если я задаю свой command, то дефолтный, wrapper для запуска демона никогда не вызывается. Как итог , демон не стартует.
Ну или я овощь..
источник