gpt4 book ai didi

mysql - 从 java docker 容器连接到 percona docker

转载 作者:行者123 更新时间:2023-11-29 10:45:30 26 4
gpt4 key购买 nike

我知道有很多类似的问题,但没有一个是我想要的。我正在关注this因为我特别需要 5.5,至少现在是这样。我的 java 项目(访问 mysql)位于我用

构建的容器中

docker build -t 项目名称-测试。

Dockerfile 非常标准,它只是复制构建的 tarball 并将其提取到特定文件夹。 CMD 是一个 shell 脚本 run_dev_server.sh,它仅使用开发配置而不是生产配置启动服务器。

我使用链接中给出的命令创建了一个 percona docker 容器

docker run --name projectname-mysql-server -e MYSQL_ROOT_PASSWORD=""-d percona:5.5

所以现在我认为,只需要链接中提到的两个链接:

docker run -p 3306:3306 --nameprojectname-local--linkprojectname-mysql-serverprojectname-testing

这给了我

docker:来自守护程序的错误响应:无法链接到未运行的容器:/projectname-mysql-server AS/projectname-local/projectname-mysql-server。
ERRO[0000] 从守护进程获取事件时出错:net/http:请求已取消

这不是很有帮助,也没有告诉我发生了什么。我对这个过程的理解有误吗?我应该做什么?

最佳答案

首先,我建议使用 Docker Hub 中的官方 Percona docker 镜像,而不是构建您自己的镜像。官方镜像有5.5版本; https://hub.docker.com/_/percona/例如,如果您需要特定更改(例如自定义配置),您可以扩展此镜像;

FROM percona:5.5
COPY my-config.cnf /etc/mysql/conf.d/

重要:我注意到您正在发布端口 3306 (-p 3306:3306)。发布端口使其可以在主机的网络接口(interface)上公开访问。仅当您有需要连接到数据库的外部软件时才应执行此操作。如果您的应用程序只需要访问数据库,则不需要发布端口,因为容器可以通过 docker 容器-容器网络相互连接,该网络是“私有(private)”的,无法从主机外部访问。

默认网络上的 --link 选项是一个遗留选项,为了向后兼容仍然存在,但在大多数情况下不应该使用。 --link 选项有许多限制;

  • 旧链接不是动态的;如果不重新创建链接到该容器的所有容器,则无法替换链接的容器
  • 重新启动链接的容器可能会中断链接,并且无法重新建立链接
  • 旧链接是单向的
  • 环境变量在容器之间共享,这很容易导致(例如)凭据泄漏到其他容器。

Docker 1.9 引入了自定义 docker 网络,这允许

一个简单的例子;

为您的应用程序创建一个网络;

docker network create mynet

创建一个数据库容器,并将其附加到网络上;无需发布其端口供其他容器连接到它。 (我在这里使用 nginx 图像,只是为了说明这个概念);

docker run -d --name db --network mynet nginx:alpine

创建一个“应用程序”容器并将其附加到同一网络;这样做允许它通过该网络与 db 容器通信;

docker run -dit --name app --network mynet alpine sh

应用程序容器现在可以使用其名称连接到 db 容器作为主机名(db);为了说明这一点,请在 app 容器中打开 shell,安装curl 并连接到 http://db:80;

docker exec -it app sh

/ # apk add --no-cache curl
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20161130-r1)
(2/4) Installing libssh2 (1.7.0-r2)
(3/4) Installing libcurl (7.52.1-r3)
(4/4) Installing curl (7.52.1-r3)
Executing busybox-1.25.1-r0.trigger
Executing ca-certificates-20161130-r1.trigger
OK: 5 MiB in 15 packages

/ # curl http://db:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

您可以在文档的 []“docker 容器网络”部分]( https://docs.docker.com/engine/userguide/networking/ ) 中阅读有关网络的更多信息(以及如何从网络动态附加和分离容器)

关于mysql - 从 java docker 容器连接到 percona docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com