我可以在主机中公开端口的docker容器内运行InfluxDB
:
» curl -k -L -I https://localhost:8086/ping
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 2bb1059b-360e-11e7-8001-000000000000
X-Influxdb-Version: 1.2.0
Date: Thu, 11 May 2017 05:53:34 GMT
我运行Ubuntu 16.04
docker容器(安装了curl),连接到与InfluxDB
容器相同的网络,我无法ping localhost:8086
。最后我发现我需要使用InfluxDB
容器的IP地址ping:
root@4a5457a5e297:/# curl -k -sL -I https://172.18.0.1:8086/ping
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: d8ab4282-360e-11e7-8002-000000000000
X-Influxdb-Version: 1.2.0
Date: Thu, 11 May 2017 05:58:25 GMT
这意味着首先我需要找出InfluxDB
容器的IP地址。我猜对了,因为我无法在ifconfig
容器中执行InfluxDB
,我不知道如何列出所有正在运行的容器的IP:docker ps
没有显示它。
因此,InfluxDB
的端口在主机中显示为localhost:8086
,但它不会暴露给其他容器。一些问题:
localhost:8086
?答案 0 :(得分:2)
我运行一个Ubuntu 16.04 docker容器(安装了curl), 连接到与InfluxDB容器相同的网络,我不是 能ping ping localhost:8086。最后我发现我需要ping 使用InfluxDB容器的IP地址:
当与同一网络上的其他容器“说话”时,请使用容器名称。您可以使用--name influxdb
然后,您将能够在同一网络中使用curl http://influxdb:8086
答案 1 :(得分:0)
如Rawkode所述,这是可能的。但出于某种原因,我不能用默认的网桥做到这一点。
public class Motor : MonoBehaviour {
public float moveSpeed = 5.0f;
public float drag = 0.5f;
public float terminalRoatationSpeed = 25.0f;
public Virtualjoystick moveJoystick;
private Rigidbody controller;
private Transform camTransform;
// Use this for initialization
void Start () {
controller = GetComponent<Rigidbody> ();
controller.maxAngularVelocity = terminalRoatationSpeed;
controller.drag = drag;
camTransform = Camera.main.transform;
}
// Update is called once per frame
void FixedUpdate () {
Vector3 dir = Vector3.zero;
dir.x = Input.GetAxis ("Horizontal");
dir.z = Input.GetAxis ("Vertical");
if(dir.magnitude > 1)dir.Normalize();
if(moveJoystick.InputDirection != Vector3.zero)
{
dir = moveJoystick.InputDirection;
}
// Rotate our Direction vector with Camera
Vector3 rotatedDir = camTransform.TransformDirection(dir);
rotatedDir = new Vector3 (rotatedDir.x, 0, rotatedDir.z);
rotatedDir = rotatedDir.normalized * dir.magnitude;
controller.AddForce (rotatedDir * moveSpeed);
}
}
创建测试网络将起作用:
$ docker run -itd --rm --name test1 alpine /bin/sh
726cd933446df40e78e760d86256e11b1e786d83057a9d075c05c4d38240656c
$ docker run -itd --rm --name test2 alpine /bin/sh
c6837529c37f486edbc3a7743a6b127b9bdaae8a619564368697137fd8ae5622
$ docker container exec test1 ping test2
ping: bad address 'test2'
$ docker container exec test2 ping test1
ping: bad address 'test1'
$ docker container stop test1
test1
$ docker container stop test2
test2
容器可以直接通信,您不必使用localhost。看一下如何公开端口
基本上,您有三种选择:
- 既不指定EXPOSE也不指定-p。
- 仅指定EXPOSE。
- 指定EXPOSE和-p。
如果您未指定其中任何一项,则除了从容器本身内部以外的任何地方都无法访问容器中的服务。
如果EXPOSE端口,则无法从Docker外部访问容器中的服务,而是从其他Docker容器中访问。所以这对于容器间通信很有用。
如果你EXPOSE和-p一个端口,容器中的服务可以从任何地方访问,甚至可以在Docker之外访问。
在此处找到:https://stackoverflow.com/a/22150099/1561148
$ docker network create testnet
ca1db96c3a533033c68d8885fac2f354919edc810e0f376f06f86e45d3050b35
$ docker run -itd --rm --name test1 --network testnet alpine /bin/sh
187f2c8534504e6a8db96c0a731c735976b19b0a710e162f3537b2f5f16d7b05
$ docker run -itd --rm --name test2 --network testnet alpine /bin/sh
7efd386c13962a56dc074903373848174fb5cdb649038a6e67fbb2f0f8bde74b
$ docker container exec test1 ping test2
PING test2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.076 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.165 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.159 ms
64 bytes from 172.18.0.3: seq=3 ttl=64 time=0.077 ms
^C
$ docker container exec test2 ping test1
PING test1 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.063 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.235 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.218 ms
64 bytes from 172.18.0.2: seq=3 ttl=64 time=0.099 ms
^C
$