Как выполнить команды docker внутри файла docker? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть docker файл:

# Use the official image as a parent image
FROM mysql/mysql-server:8.0

# Set the working directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Copy the file from your host to your current location
COPY customers.sql .
COPY entrypoint.sh .

# Inform Docker that the container is listening on the specified port at runtime.
EXPOSE 1433:1433

# Run the command inside your image filesystem
RUN chmod +x entrypoint.sh

# Run the specified command within the container.
RUN /bin/bash ./entrypoint.sh

И entypoint. sh:

mysql --host=localhost --protocol=tcp -u root -pMypassword -e "create database customersDatabase; use customersDatabase; source customers.sql;"

, но я получаю следующее сообщение об ошибке:

ОШИБКА 2003 (HY000): Невозможно подключиться к MySQL серверу на 'localhost' (99)

при запуске docker build

, что является правильным способом построения точки входа. sh для запуска docker команд?

1 Ответ

0 голосов
/ 24 марта 2020

ДО РЕДАКТИРОВАНИЯ ОП:

проблема:

./entrypoint.sh: line 2: docker: command not found

Вы пытаетесь запустить docker внутри docker.

Возможные решения

1) Mount host's docker sock

или

2) Install docker inside docker before you run your
-> apt install docker.io
--> expect super size of your image

точка входа

Разница между 1) и 2)

in 1) ваш docker docker является хостом docker

в то время как в 2) установлен docker в docker является независимым и, следовательно, изолирован от хоста

ПОСЛЕ РЕДАКТИРОВАНИЯ

проблема:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (99)

РЕДАКТИРОВАТЬ: И так как вы редактируете свой вопрос, который теперь не соответствует вашему названию, я предоставлю вам вторую проблему

Вы не можете подключиться к своему локальному хосту, потому что инсайдер docker, localhost - docker сам, а не ваш хост.

  • Это можно решить с помощью сетевого драйвера хоста.

  • Или, предпочтительно, тоже поместите свою базу данных в docker, в той же сети docker, выставьте порт, назовите свой контейнер базы данных как mysql_database и подключитесь к нему как mysql_database: порт

  • Или не пытайтесь подключиться к БД, которая находится в вашем контейнере изнутри вашего контейнера. Вот и я думаю, что антипаттерн. Обычно должно быть возможно войти в CLI базы данных, где вы можете запускать команды
...