【问题标题】:Container Not Accessible From Other Container with docker run使用 docker run 无法从其他容器访问容器
【发布时间】:2019-01-17 20:07:25
【问题描述】:

情况如下:

当我使用

在本地 (docker-compose) 运行 MySQL 5.7 docker 映像时
container_name: test-mysql-docker  

它工作正常。我在另一个 docker 容器中的 JDBC 程序可以通过 container_name 访问 MySQL 容器。

但是,当我将该 MySQL 5.7 映像推送到我的 docker hub 帐户,然后尝试在单独的命令窗口中运行它时,它不起作用(请参阅下面我使用的运行命令)。问题:在另一个docker容器中运行的JDBC程序无法访问它,并给出“尝试了3次”的错误信息。

因此,我认为我在下面的运行命令中的语法不正确。从下面的运行命令下载 MySQL 后,我可以从 docker 外部访问 MySQL 容器,因此它已启动并且我需要的数据就在那里。因此我在想,只是container_name有问题,但是在这里寻找专家给我一些想法。

这是我的运行命令,它成功关闭了 MySQL 5.7 映像(可在 docker 外部访问,但不能从另一个 docker 容器访问,因为使用“docker-compose up”在本地运行时)

$ docker run -it -p 3307:3306 --name test-mysql-docker -v /Users/.../ZipCodeLookup.sql:/docker-entrypoint-initdb.d/ZipCodeLookup.sql -e MYSQL_ROOT_PASSWORD=thepass docker-account/mysql:5.7 

我假设从 docker hub 运行一个 docker 容器,我需要按照上面的命令手动指定所有参数(使用 docker-compose 时我不必这样做)。

任何人都可以看到上面的运行命令有什么问题或可能缺少什么会阻止另一个容器通过 JDBC 访问使用“test-mysql-docker”作为容器名称的 MySQL 容器吗?

非常感谢,

【问题讨论】:

  • 在容器中,你访问MySQL的url是什么?
  • 工作 JDBC 字符串,如果我使用 docker-compose 运行两个容器:final String DATABASE_URL = "jdbc:mysql://test-mysql-docker:3306/ZipCodeLookup?useSSL=false&" + "serverTimezone= America/New_York&user=root&password=thepass&autoReconnect=true";

标签: docker jdbc docker-compose


【解决方案1】:

假设您正确使用test-mysql-docker:3306 作为从 JDBC 访问数据库的 url,您需要将它们附加到同一个自定义网络。默认桥接网络不起作用。

docker network create mynet
docker run -d --net mynet -p 3307:3306 --name test-mysql-docker -v /Users/.../ZipCodeLookup.sql:/docker-entrypoint-initdb.d/ZipCodeLookup.sql -e MYSQL_ROOT_PASSWORD=thepass docker-account/mysql:5.7 
docker run -it --net mynet JDBC

【讨论】:

  • 优秀!!!这行得通,谢谢。我现在需要专注于让 Docker 的使用变得不那么复杂。
猜你喜欢
  • 2021-05-22
  • 2022-11-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多