如何使用 Docker 启动多个使用 tcp 的容器
How to start multiple containers that use tcp with Docker
我正在尝试 运行 Docker 容器中的第二个 Meteor 应用程序。第一个(我想要 运行ning)可以通过 localhost:3000
访问,我想 运行 第二个在另一个端口,如 localhost:3003
。当我尝试访问第二个时,我得到了这个
This website is not accessible. Localhost don't allow the connexion. Do a research about localhost 3003 on Google.
如果我查看 Docker,我可以看到我的容器是 运行ning:
但是我注意到端口之间存在差异,可以访问的端口是0.0.0.0:3000->3000/tcp
,不能访问的端口是3000/tcp, 0.0.0.0:3003->3003/tcp
,所以我认为这里有问题。
在我的 docker-compose.yml 中,我做了:
app:
image: jeromevi/controlcontainersapp
ports:
- "3003:3003"
environment:
- ROOT_URL=http://localhost:3003
- MONGO_URL=mongodb://mongo:27017/meteor
mongo:
image: mongo:latest
感谢您的帮助
[编辑] 有日志:
=> Starting app on port 3000...
/opt/meteor/dist/bundle/programs/server/node_modules/fibers/future.js:313
throw(ex);
^
MongoError: failed to connect to server [mongo:27017] on first connect
at Object.Future.wait (/opt/meteor/dist/bundle/programs/server/node_modules/fibers/future.js:449:15)
at new MongoConnection (packages/mongo/mongo_driver.js:219:27)
at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:4:16)
at Object.<anonymous> (packages/mongo/remote_collection_driver.js:38:10)
at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19)
at new Mongo.Collection (packages/mongo/collection.js:103:40)
at meteorInstall.both.collections.infosContainers.js (both/collections/infosContainers.js:2:14)
at fileEvaluate (packages/modules-runtime.js:181:9)
at require (packages/modules-runtime.js:106:16)
at /opt/meteor/dist/bundle/programs/server/app/app.js:217:1
- - - - -
at [object Object].<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/topologies/server.js:313:35)
at emitOne (events.js:77:13)
at [object Object].emit (events.js:169:7)
at [object Object].<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/pool.js:271:12)
at [object Object].g (events.js:260:16)
at emitTwo (events.js:87:13)
at [object Object].emit (events.js:172:7)
at Socket.<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/connection.js:165:49)
at Socket.g (events.js:260:16)
at emitOne (events.js:77:13)
[EDIT2] 使用新配置时,错误是:
但是我有网络testNtw:
NETWORK ID NAME DRIVER SCOPE
6767c4bf208f bridge bridge local
c69fbc3a59cf host host local
f6f5083df32e none null local
3d0aacdbb757 testNtw bridge local
并且我做了与答案中相同的 docker-compose.yml
尝试以下操作:
sudo docker network create <your network name>
Docker 撰写文件:
version: '2'
services:
app:
image: jeromevi/controlcontainersapp
ports:
- "3003:3000"
environment:
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/meteor
networks:
- <your network name>
mongo:
image: mongo:latest
networks:
- <your network name>
networks:
<your network name>:
external: true
然后在您的浏览器中检查 url:
http://localhost:3003
澄清:
对于默认网络,您需要使用 links
这是一项遗留功能。我建议使用 User-Defined
网络。 User-Defined
网络提供内置 DNS
,因此您可以通过 name
从同一 User-Defined
网络上的其他容器连接到您的容器。在您的情况下,需要从名为 app
.
的容器访问名为 mongo
的容器
我正在尝试 运行 Docker 容器中的第二个 Meteor 应用程序。第一个(我想要 运行ning)可以通过 localhost:3000
访问,我想 运行 第二个在另一个端口,如 localhost:3003
。当我尝试访问第二个时,我得到了这个
This website is not accessible. Localhost don't allow the connexion. Do a research about localhost 3003 on Google.
如果我查看 Docker,我可以看到我的容器是 运行ning:
0.0.0.0:3000->3000/tcp
,不能访问的端口是3000/tcp, 0.0.0.0:3003->3003/tcp
,所以我认为这里有问题。
在我的 docker-compose.yml 中,我做了:
app:
image: jeromevi/controlcontainersapp
ports:
- "3003:3003"
environment:
- ROOT_URL=http://localhost:3003
- MONGO_URL=mongodb://mongo:27017/meteor
mongo:
image: mongo:latest
感谢您的帮助
[编辑] 有日志:
=> Starting app on port 3000...
/opt/meteor/dist/bundle/programs/server/node_modules/fibers/future.js:313
throw(ex);
^
MongoError: failed to connect to server [mongo:27017] on first connect
at Object.Future.wait (/opt/meteor/dist/bundle/programs/server/node_modules/fibers/future.js:449:15)
at new MongoConnection (packages/mongo/mongo_driver.js:219:27)
at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:4:16)
at Object.<anonymous> (packages/mongo/remote_collection_driver.js:38:10)
at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19)
at new Mongo.Collection (packages/mongo/collection.js:103:40)
at meteorInstall.both.collections.infosContainers.js (both/collections/infosContainers.js:2:14)
at fileEvaluate (packages/modules-runtime.js:181:9)
at require (packages/modules-runtime.js:106:16)
at /opt/meteor/dist/bundle/programs/server/app/app.js:217:1
- - - - -
at [object Object].<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/topologies/server.js:313:35)
at emitOne (events.js:77:13)
at [object Object].emit (events.js:169:7)
at [object Object].<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/pool.js:271:12)
at [object Object].g (events.js:260:16)
at emitTwo (events.js:87:13)
at [object Object].emit (events.js:172:7)
at Socket.<anonymous> (/opt/meteor/dist/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/connection.js:165:49)
at Socket.g (events.js:260:16)
at emitOne (events.js:77:13)
[EDIT2] 使用新配置时,错误是:
但是我有网络testNtw:
NETWORK ID NAME DRIVER SCOPE
6767c4bf208f bridge bridge local
c69fbc3a59cf host host local
f6f5083df32e none null local
3d0aacdbb757 testNtw bridge local
并且我做了与答案中相同的 docker-compose.yml
尝试以下操作:
sudo docker network create <your network name>
Docker 撰写文件:
version: '2'
services:
app:
image: jeromevi/controlcontainersapp
ports:
- "3003:3000"
environment:
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/meteor
networks:
- <your network name>
mongo:
image: mongo:latest
networks:
- <your network name>
networks:
<your network name>:
external: true
然后在您的浏览器中检查 url:
http://localhost:3003
澄清:
对于默认网络,您需要使用 links
这是一项遗留功能。我建议使用 User-Defined
网络。 User-Defined
网络提供内置 DNS
,因此您可以通过 name
从同一 User-Defined
网络上的其他容器连接到您的容器。在您的情况下,需要从名为 app
.
mongo
的容器