gpt4 book ai didi

mongodb - 我无法使用容器 docker 连接到 mongo

转载 作者:可可西里 更新时间:2023-11-01 10:02:25 26 4
gpt4 key购买 nike

我是 docker 的新手所以我跟进了一个教程here ,第 6、7 和 8 部分,以便在项目中使用和学习 docker。

问题是当我使用 docker-compose.yml 在我的笔记本电脑上构建图像时,我的 stack_server 可以连接到 mongo。

但如果我从 docker hub 构建镜像,然后在我的笔记本电脑上单独拉取和运行它们,我的 stack_server 无法连接到 mongo。

这是我的 docker-compose.yml :

client:
build: ./client
restart: always
ports:
- "80:80"
links:
- server
mongo:
image: mongo
command: --smallfiles
restart: always
ports:
- "27017:27017"
server:
build: ./server
restart: always
ports:
- "8080:8080"
links:
- mongo

但是,我的 stack_client 可以连接到 stack_server。

和我运行图像的命令(我的图像是公开的)

docker-run -i -t -p 27017:27017 mongo
docker-run -i -t -p 80:80 mik3fly4steri5k/stack_client
docker-run -i -t -p 8080:8080 mik3fly4steri5k/stack_server

和我的错误日志

bryan@debian-dev7:~$ sudo docker run -i -t -p 8080:8080 mik3fly4steri5k/stack_server
[sudo] password for bryan:
Express server listening on 8080, in development mode
connection error: { Error: connect ECONNREFUSED 127.0.0.1:27017
at Object._errnoException (util.js:1021:11)
at _exceptionWithHostPort (util.js:1043:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)
name: 'MongoError',
message: 'connect ECONNREFUSED 127.0.0.1:27017' }

这是我的 stack_server dockerfile

FROM node:latest

# Set in what directory commands will run
WORKDIR /home/app

# Put all our code inside that directory that lives in the container
ADD . /home/app

# Make sure NPM is not cached, remove everything first
RUN rm -rf /home/app/node_modules/npm \
&& rm -rf /home/app/node_modules

# Install dependencies
RUN npm install

# Tell Docker we are going to use this port
EXPOSE 8080

# The command to run our app when the container is run
CMD ["node", "app.js"]

第一个解决方案但已弃用

docker-run -i -t -p 27017:27017 --name:mongo mongo
docker-run -i -t -p 80:80 mik3fly4steri5k/stack_client
docker-run -i -t -p 8080:8080 --link mongo:mongo mik3fly4steri5k/stack_server

当我运行我的 stack_server 时,我必须在我的 mongo 上输入一个名称并将它与参数 --link 链接

docker documentation

Warning: The --link flag is a deprecated legacy feature of Docker. 
It may eventually be removed.
Unless you absolutely need to continue using it,
we recommend that you use user-defined networks to facilitate communication
between two containers instead of using --link.
One feature that user-defined networks do not support that you can do with
--link is sharing environmental variables between containers.
However, you can use other mechanisms such as volumes to share environment
variables between containers in a more controlled way.

最佳答案

使用以下命令运行您的 stack_server

sudo docker run -i -t -p 8080:8080 --link mongo:mongo mik3fly4steri5k/stack_server

注意:--link 标志已弃用

关于mongodb - 我无法使用容器 docker 连接到 mongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46873527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com