【问题标题】:Docker containers network: Redis and Custom ImageDocker 容器网络:Redis 和自定义镜像
【发布时间】:2020-10-02 00:19:50
【问题描述】:

我正在努力连接两个容器服务。具体来说,我想使用在一个容器中运行的 Redis 服务器 (https://hub.docker.com/_/redis/):docker run -d --name my_redis_server redis,自定义映像运行如下:docker run -p 8888:8888 --mount type=bind,source=<my_folder>,target=/data/ my_container 使用以下 Dockerfile 和 docker-compose.yml 构建:

Dockerfile

FROM ubuntu

ENV PATH="/root/miniconda3/bin:${PATH}"
ARG PATH="/root/miniconda3/bin:${PATH}"

# Updates and tools 
RUN apt-get update && \
    apt-get install -y gcc make apt-transport-https ca-certificates build-essential git redis-server

RUN apt-get install -y wget && rm -rf /var/lib/apt/lists/*

RUN wget \
    https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh 

RUN conda --version

# Create conda environment
RUN conda create python=3.6 --name my_env

# Run in a new shell
RUN /bin/bash -c "activate my_env"
RUN <Install some packages>
RUN conda install -c conda-forge jupyterlab -y
RUN conda install -c anaconda redis

# The code to run when the container is started:
# Entrypoint
WORKDIR /data/
ENTRYPOINT ["jupyter", "notebook", "--ip=0.0.0.0", "--no-browser", "--allow-root"]

docker-compose.yml

version: '2.3'

services:
   my_container:
     container_name: my_container_env
     build: ./
     restart: always
     ports:
      - '8888:8888'

根据我的理解,我应该能够使用内部网桥 IP(即 172.17.0.X)或 docker DNS 名称(即 my_redis_server)从 my_container(特别是 jupyter)连接到 my_redis_server ) 在这两种情况下都使用标准 Redis 映像端口 6379。

不幸的是,这对我不起作用...我错过了什么?

谢谢大家!

系统:Windows 10 - Docker 2.3.0.2

补充说明:

我确实尝试(作为解决方法)改变方法并通过将 my_container 运行为:docker run -p 8888:8888 -p 6379:6379 --mount type=bind,source=&lt;my_folder&gt;,target=/data/ my_container 并从容器内的 jupyter 连接到本地主机 Redis 服务器(编译的 WIN 版本)连接本地主机为127.0.0.1:6379,这也不起作用。

【问题讨论】:

    标签: python docker redis docker-compose dockerfile


    【解决方案1】:

    您尚未指定您所遵循的具体方法。在这两种情况下,问题都是由于未定义网络而出现的。在开头指定的docker run方法中,需要使用--network=&lt;network_name&gt;指定网络。此网络可以是默认桥接网络、用户定义的桥接网络、主机网络或无。确定使用什么,因为它们都有自己的目的和缺点。

    docker-compose 的方式,我相信您仍然在docker-compose 中使用docker runmy_container 运行Redis,这会导致两个容器都连接到不同的网络。所以在这里你也需要使用相同的 compose 来运行 Redis。

    更新 docker-compose:

    version: '2.3'
    
    services:
       my_container:
         container_name: my_container_env
         build: ./
         restart: always
         ports:
          - '8888:8888'
       redis:
         container_name: my_redis_server
         restart: always
         ports:
          - 6379:6379
    

    参考资料:

    1. Networking overview
    2. Use bridge networks
    3. Networking in Compose

    【讨论】:

    • 谢谢,我确实按照建议调整了 docker-compose,我能够通过使用此连接测试 link 将主机更改为容器名称来连接到 Redis 容器。跨度>
    猜你喜欢
    • 2019-12-21
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多