首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将容器链接到码头(RancherOS和命令行)

将容器链接到码头(RancherOS和命令行)
EN

Stack Overflow用户
提问于 2018-03-14 09:17:52
回答 2查看 1.7K关注 0票数 3
  • 我运行一个RancherOS来运行码头容器
  • 我在GUI上创建了一个容器来运行我的数据库(图片: mysql,name: r e4e8df05)。不同的容器使用它。
  • 我可以在GUI上将其他容器链接到它

  • 这一次,我想自动在jenkins上创建和启动一个容器,但是链接不太正常。

我的命令:

代码语言:javascript
运行
复制
docker run -d --name=app-that-needs-mysql --link mysql:mysql myimages.mycompany.com/appthatneedsmysql

我得到了错误:

代码语言:javascript
运行
复制
Error response from daemon: Could not get container for mysql

我尝试了不同的东西:

1)

代码语言:javascript
运行
复制
--link r-mysql-e4e8df05:mysql

错误:

代码语言:javascript
运行
复制
Cannot link to /r-mysql-e4e8df05, as it does not belong to the default network

2)

尝试使用--net选项

运行:docker network ls

代码语言:javascript
运行
复制
NETWORK ID          NAME                DRIVER              SCOPE
c..........e        bridge              bridge              local
4..........c        host                host                local
c..........a        none                null                local
  • 对于--net none,它是成功的,但实际上它不起作用。应用程序无法连接到DB。
  • 使用--net host错误消息conflicting options: host type networking can't be used with links. This would result in undefined behavior
  • 带有--net bridge错误消息:Cannot link to /r-mysql-e4e8df05, as it does not belong to the default network

我还检查了这个mysql运行的牧场主GUI:

它得到一个continer IP起始蛋白: 10.X.X.X。

我也尝试过add --net managed,但是错误:network managed not found

我想我很怀念这个对接过程中的一些东西。,请给我一些想法,我怎样才能使这些工作。

(以前,当我创建同一个容器并链接到GUI中的mysql时,它是起作用的)

EN

回答 2

Stack Overflow用户

发布于 2018-04-14 04:49:28

嘿@Tomi --你可以在你喜欢的任何港口,从牧场主那里公开mysql容器。这样,您就不必链接容器,那么jenkins生成的容器就可以连接到主机上暴露端口上的容器。您也可以使用jenkins在牧场主内部使用牧场主cli旋转容器。这样你就不用在主机网络上出现mysql了.几种用牧场主剥猫皮的方法。

票数 2
EN

Stack Overflow用户

发布于 2018-03-20 11:13:39

乍一看,Rancher似乎使用了托管网络,而docker network ls并没有显示这一点。

再现问题

我用假的高山容器来复制这个:

代码语言:javascript
运行
复制
# create some network
docker network create your_invisible_network

# run a container belonging to this network
docker container run \
  --detach \
  --name r-mysql-e4e8df05 \
  --net your_invisible_network \
  alpine tail -f /dev/null

# trying to link this container
docker container run \
  --link r-mysql-e4e8df05:mysql \
  alpine ping mysql

我确实得到了docker: Error response from daemon: Cannot link to /r-mysql-e4e8df05, as it does not belong to the default network.

可能解决办法

解决方法是创建一个用户自定义网桥和simpy,将您的mysql容器添加到其中:

代码语言:javascript
运行
复制
# create a network
docker network create \
  --driver bridge \
  a_workaround_network

# connect the mysql to this network (and alias it)
docker network connect \
  --alias mysql \
  a_workaround_network r-mysql-e4e8df05

# try to ping it using its alias
docker container run \
  --net a_workaround_network \
  alpine \
  ping mysql

# yay!
PING mysql (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.135 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.084 ms

正如您在输出中所看到的那样,通过它的DNS名称来单击mysql容器是可能的。

很高兴知道:

  • 在用户创建的网桥网络中,DNS解析无需显式--link容器就可以正常工作:)
  • 容器可以属于多个网络,这就是为什么这样做的原因。在本例中,mysql容器同时属于your_invisible_networka_workaround_network

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49273718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档