Как разрешить «драйвер не смог запрограммировать внешнее соединение» в docker-compose? - PullRequest
0 голосов
/ 19 сентября 2019

Я использую docker@19.03.2 build 6a30dfc) и docker-compose@1.19.0, build 9e633ef.

Учитывая docker-compose.yml (который работал нормально в течение очень долгого времени и былнеизменный с апреля 2019 г.) файл, который раскручивает только контейнер mariadb и должен предоставлять порт mysql хосту:

pe-db:
    image: mariadb:10.3
    ports:
        - 3306:3306
    environment:
        MYSQL_DATABASE: dev_db
        MYSQL_PASSWORD: password
        MYSQL_USER: dev
        MYSQL_ROOT_PASSWORD: root_password

еще при запуске:

 docker-compose up

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

Recreating fcac8d931b6a_ratepipeline_pe-db_1 ... error

ERROR: for fcac8d931b6a_ratepipeline_pe-db_1  Cannot start service pe-db: driver failed programming external connectivity on endpoint ratepipeline_pe-db_1 (6e649313e4cccd484d0672183cd24daf21c5e8ad3dc1e01fda57d0c942194b6d): Bind for 0.0.0.0:3306 failed: port is already allocated

ERROR: for pe-db  Cannot start service pe-db: driver failed programming external connectivity on endpoint ratepipeline_pe-db_1 (6e649313e4cccd484d0672183cd24daf21c5e8ad3dc1e01fda57d0c942194b6d): Bind for 0.0.0.0:3306 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

При проверке, что работает через порт 3306 через:

sudo netstat -nlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      3042/docker-proxy

я вижу docker-прокси.Нет другой базы данных mysql, работающей локально.Я могу убить docker-proxy через:

sudo killall docker-proxy
sudo netstat -nlp | grep 3306

, и тогда я не вижу ничего работающего на порту 3306.Тем не менее, docker-compose up снова столкнется с той же ошибкой, утверждая, что порт уже используется, хотя netstat не покажет пользователя на этом порту.

Я также попытался перезапустить демон docker с помощью

 sudo service docker restart

и перезагрузка моей системы.Проблема сохраняется.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 19 сентября 2019

В моем случае у меня действительно был запущен контейнер mysql.Он не будет отображаться в netstat, но я мог видеть его через

docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES

b59b7973d88b        mysql:5.7                   "docker-entrypoint.s…"   10 days ago         Up 8 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp                                        squbsstub_db_1

. Затем я мог убить этот контейнер через CONTAINER ID, в этом случае:

docker kill b59b7973d88b

Тогда мой бывшийпроект docker-compose будет крутиться нормально.

...