Se eu tiver um banco de dados mysql em execução em alguma máquina host, e esse host também estiver executando um contêiner de docker: como acessar o banco de dados mysql a partir do contêiner de docker que está sendo executado no host?
Por exemplo, existe uma maneira de publicar uma porta de hosts no contêiner (o inverso do que o docker executa -p)?
Respostas:
Existem várias discussões de longa data sobre como fazer isso de maneira consistente, bem compreendida e portátil. Nenhuma resolução completa, mas eu irei vinculá-lo às discussões abaixo.
De qualquer forma, muitos desejam tentar usar a opção --add-host para executar o docker para adicionar o endereço IP do host ao arquivo / etc / host do contêiner. A partir daí, é trivial conectar-se ao host em qualquer porta necessária:
Documentação:
https://docs.docker.com/engine/reference/commandline/run/
Discussões sobre como acessar o host do contêiner:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
fonte
Dos documentos 18.03:
EXEMPLO: Aqui está o que eu uso para minha cadeia de conexão MySQL dentro do meu contêiner para acessar a instância do MySQL no meu host:
fonte
A partir do Docker 17.06, um nome DNS especial somente para Mac está disponível nos contêineres do docker que são resolvidos para o endereço IP do host. Isto é:
docker.for.mac.localhost
A documentação está aqui: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
fonte
docker.for.mac.host.internal
a partirDocker 17.12.0 ce
de docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
trabalha em18.03.1-ce-mac65
Use host.docker.internal a partir do Docker 18.03.
fonte
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Outras respostas não funcionaram bem para mim. Meu contêiner não pôde resolver o IP do host usando host.docker.internal . Existem duas maneiras
Compartilhando a rede do host --net = host:
Usando o endereço IP do docker, que geralmente é 172.17.0.1 . Você pode verificá-lo chamando o comando ifconfig e pegando inet addr da interface do docker
Depois de ter esse endereço IP, você pode passá-lo como um argumento para executar o docker e depois para o aplicativo ou, como eu faço, mapear o local do jdbc.properties via volume para o diretório na máquina host, para que você possa gerenciar o arquivo externamente .
NOTA: Seu banco de dados pode não permitir conexões externas. No caso do postgresql, você precisa editar 2 arquivos, conforme descrito aqui e aqui :
Edite o postgresql.conf para ouvir em todos os endereços. Por padrão, ele apontará para localhost.
Edite pg_hba.conf para permitir conexões de todos os endereços. Adicione na última linha:
IMPORTANTE: A última etapa da atualização do acesso ao banco de dados não é recomendada para uso em produção, a menos que você tenha certeza do que está fazendo.
fonte