从我的本地networking连接postgreSQL + postGIS docker容器

我已经从docker中心build立了docker集装箱:

docker run --name some-postgis -e POSTGRES_PASSWORD=mysecretpassword -d mdillon/postgis docker run -it --link some-postgis:postgres --rm postgres \ sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

检查:

 $ docker inspect b89c7f54e76a [ { "Id": "b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f", "Created": "2017-08-08T14:34:02.375576229Z", "Path": "docker-entrypoint.sh", "Args": [ "postgres" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 8293, "ExitCode": 0, "Error": "", "StartedAt": "2017-08-09T10:08:11.317833478Z", "FinishedAt": "2017-08-08T18:18:17.110547652Z" }, "Image": "sha256:1c5da6633b90bfb50486b543dd11c7efb800e6d27d338d51aaf82e929d83bde2", "ResolvConfPath": "/var/lib/docker/containers/b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f/resolv.conf", "HostnamePath": "/var/lib/docker/containers/b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f/hostname", "HostsPath": "/var/lib/docker/containers/b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f/hosts", "LogPath": "/var/lib/docker/containers/b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f/b89c7f54e76aa82bd142e1eb45a1f12008bf2ee2f94e392b08b386493b58891f-json.log", "Name": "/psql-futurSahel", "RestartCount": 0, "Driver": "aufs", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": null, "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": -1, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0 }, "GraphDriver": { "Data": null, "Name": "aufs" }, "Mounts": [ { "Type": "volume", "Name": "bb59bb5d17ad6b3ca59d7acf5c21936ce19fb15ec9fa13388ce63c01ed559f37", "Source": "/var/lib/docker/volumes/bb59bb5d17ad6b3ca59d7acf5c21936ce19fb15ec9fa13388ce63c01ed559f37/_data", "Destination": "/var/lib/postgresql/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], "Config": { "Hostname": "b89c7f54e76a", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "5432/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "POSTGRES_PASSWORD=postgres", "PATH=/usr/lib/postgresql/9.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "GOSU_VERSION=1.7", "LANG=en_US.utf8", "PG_MAJOR=9.6", "PG_VERSION=9.6.3-1.pgdg80+1", "PGDATA=/var/lib/postgresql/data", "POSTGIS_MAJOR=2.3", "POSTGIS_VERSION=2.3.2+dfsg-1~exp2.pgdg80+1" ], "Cmd": [ "postgres" ], "ArgsEscaped": true, "Image": "mdillon/postgis", "Volumes": { "/var/lib/postgresql/data": {} }, "WorkingDir": "", "Entrypoint": [ "docker-entrypoint.sh" ], "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "07536f68477b1f345cff2caa3118d7ee9251b0a84a2ef6a1f641c24aecd1ae53", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "5432/tcp": null }, "SandboxKey": "/var/run/docker/netns/07536f68477b", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "98ca66036295516d5d653b865f3bf4de976b1f8fc704269ef5d7d067817a8c4d", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "1f95d91f247bb8cb99e8eb5c1d3911b82812947880c9e2ba6ec4db3cdc8f131b", "EndpointID": "98ca66036295516d5d653b865f3bf4de976b1f8fc704269ef5d7d067817a8c4d", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } } ] 

它像我的桌面上的魅力,我可以使用psql与服务器进行交互。 它完美的作品!

 psql -h 172.17.0.2 -p 5432 -U postgres 

但是我想让我的同事连接数据库,我不明白它是如何工作的。

在这一点上(如果我们假设我的本地IP是192.168.0.14

 psql -h 192.168.0.14 -p 5432 -U postgres 

不起作用…

我发现了一些链接:

  • https://developer.ibm.com/recipes/tutorials/networking-your-docker-containers-using-docker0-bridge/
  • http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/

但它仍然清楚。

你需要做的是运行容器时的端口映射。

 docker run -p 5432:5432 --name some-postgis -e POSTGRES_PASSWORD=mysecretpassword -d mdillon/postgis 

这将映射主机上的5432(左侧)到容器上的5432(右侧)。 只要您的IP可以从他的机器上访问,您的同事就可以访问数据库