从java docker容器连接到percona docker

我知道有很多类似的问题,但他们都不是我想要的。 我跟着这个,因为我特别需要5.5,至less现在。 我的Java项目(访问MySQL)是在我build造的容器中

docker build -t projectname-testing .

Dockerfile是非常标准的,它只是复制一个内置的压缩​​包,并将其提取到特定的文件夹。 CMD是一个shell脚本run_dev_server.sh ,它只是用devconfiguration启动服务器,而不是生产环境。

我使用链接中给出的命令创build了percona泊坞窗容器

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

所以现在我看到它的方式,只需要链接中提到的两个链接:

docker run -p 3306:3306 --name projectname-local --link projectname-mysql-server projectname-testing

这给了我

docker: Error response from daemon: Cannot link to a non running container: /projectname-mysql-server AS /projectname-local/projectname-mysql-server. ERRO[0000] error getting events from daemon: net/http: request canceled

这不是很有帮助,并不告诉我发生了什么事情。 我理解这个过程是错误的吗? 我该怎么做?

首先,我会推荐使用Docker Hub官方的Percona docker镜像,而不是构build自己的镜像。 官方图片有5.5版本; https://hub.docker.com/_/percona/例如,如果您需要特定更改(例如自定义configuration),则可以扩展此映像;

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

重要说明 :我注意到您正在发布端口3306( -p 3306:3306 )。 发布端口可以在主机的networking接口上公开访问。 如果您有需要连接到数据库的外部软件,则应该只执行此操作。 如果只有您的应用程序需要访问数据库,则不需要发布端口,因为容器可以通过docker container-containernetworking连接到彼此,这是“private”,不能从主机外部访问。

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

  • 传统的链接不是dynamic的; 无法重新创build链接到该容器的所有容器,而无法replace链接的容器
  • 重新启动链接的容器可能会中断链接,无法重新build立链接
  • 传统的链接是单向的
  • 环境variables在容器之间共享,这很容易导致泄漏(例如)凭据到其他容器。

Docker 1.9引入了自定义的dockernetworking,允许

一个简单的例子;

为您的应用程序创build一个networking;

 docker network create mynet 

创build一个数据库容器,并将其附加到networking上; 不需要为其他容器发布端口来连接它。 (我在这里使用一个nginx的图片,只是为了说明这个概念);

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

创build一个“应用程序”容器并将其连接到同一个networking; 这样做可以让它通过该networking与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 container networking”部分阅读有关networking的更多信息(还有如何从networkingdynamic连接和分离容器)( https://docs.docker.com/engine/userguide/networking / )