如何从主机上的浏览器连接到docker容器?

我使用的是Mac 1.12.0-rc4-beta19的Docker。
使用以下dockerfile和docker-compose.yml构build的容器。

我想通过http://localhost:1344从主机os浏览器连接到容器的1344端口。
但连接失败。

我正在使用容器的1344testing瓶(python轻量级web框架)应用程序

为什么不能从主机连接到容器的端口?

泊坞窗,compose.yml:

  version: '2' services: datastore: image: busybox:latest volumes: - ./share:/share_to_container ### base (ubuntu) base: build: ./ ports: - "127.0.0.1:1344:1344" - "8000:8000" volumes: - ./app:/app volumes_from: - datastore links: - db - webserver db: build: context: . dockerfile: "mysqlfile" environment: - MYSQL_ROOT_PASSWORD=mypassword ports: - "3306:3306" volumes: - ./mysql:/mysql volumes_from: - datastore webserver: image: nginx ports: - "8080:80" volumes: - ./nginx/mysite.template:/etc/nginx/conf.d/mysite.template volumes_from: - datastore 

编辑:

端口8080连接正确,但是1344失败

以下是基本服务的完整Dockerfile

Dockerfile_for_base:

 from ubuntu:latest maintainer myname run mkdir ~/app copy vim /root/.vim copy vimrc /root/.vimrc #update run apt-get update run apt-get -y update run apt-get -y install libssl-dev run apt-get -yf install curl run apt-get -y install mysql-client run apt-get -y install clang run apt-get -y install lldb run apt-get -y install make run apt-get -y install libsqlite3-dev run apt-get -y install man run apt-get -y install vim run apt-get -y install git run apt-get -y install pkg-config run apt-get -y install zip run apt-get -y install unzip run apt-get -y install language-pack-ja-base run apt-get -y install language-pack-ja run apt-get -y install language-pack-en-base run apt-get -y install language-pack-en run apt-get -y install fcitx-mozc run apt-get -y install libreadline-dev # setting locale to japanese run update-locale LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja env LANG ja_JP.UTF-8 env LC_CTYPE ja_JP.UTF-8 env LC_MESSAGES en_US.UTF-8 run im-config -n fcitx # end of locale settings # install latest python3 and some python packages (https://github.com/docker-library/python/blob/3db904b3f5407840e591daf3aa54670a685b22b3/3.5/Dockerfile) ENV GPG_KEY 97FC712E4C024BBEA48A61ED3A5CA953F73C700D ENV PYTHON_VERSION 3.5.2 # if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'" ENV PYTHON_PIP_VERSION 8.1.2 RUN set -ex \ && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[az]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \ && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[az]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc \ && export GNUPGHOME="$(mktemp -d)" \ && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \ && gpg --batch --verify python.tar.xz.asc python.tar.xz \ && rm -r "$GNUPGHOME" python.tar.xz.asc \ && mkdir -p /usr/src/python \ && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \ && rm python.tar.xz \ \ && cd /usr/src/python \ && ./configure \ --enable-loadable-sqlite-extensions \ --enable-shared \ && make -j$(nproc) \ && make install \ && ldconfig \ && pip3 install --no-cache-dir --upgrade pip==$PYTHON_PIP_VERSION \ && [ "$(pip list | awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \ && find /usr/local -depth \ \( \ \( -type d -a -name test -o -name tests \) \ -o \ \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \ \) -exec rm -rf '{}' + \ && rm -rf /usr/src/python ~/.cache # make some useful symlinks that are expected to exist RUN cd /usr/local/bin \ && ln -s easy_install-3.5 easy_install \ && ln -s idle3 idle \ && ln -s pydoc3 pydoc \ && ln -s python3 python \ && ln -s python3-config python-config # end of latest python installation #install some packages run pip --no-cache-dir install bottle run pip --no-cache-dir install feedparser run pip --no-cache-dir install PyMySQL run pip --no-cache-dir install -U pip run pip --no-cache-dir install -U setuptools #prompt and compiler environment variables env CC clang env CXX clang++ run echo 'export PS1="\h:\W \u$ "' >> ~/.bashrc # git config run git config --global user.name "myusername" run git config --global user.email "my@email.address" run git config --global color.ui true run git config --global core.editor vim expose 1000 expose 2000 expose 3000 expose 4000 expose 5000 expose 1344 cmd bash 

如果通过“主机操作系统浏览器”,你的意思是你的Mac,你当然需要从build议的端口映射中删除主机。 您无法连接的原因是实际的Docker主机是在您的Mac和Docker之间运行的(xhyve)虚拟机。 Docker会自动发布你的Mac和容器之间的端口,只要删除主机,即- "1344:1344"

(Fyi,在你的设置中,你需要通过虚拟主机来连接,这对你并没有什么帮助。)

如果您仍然有问题,请发布任何错误和步骤重现。

那么,在你发布你的Dockerfile之后,它看起来不像是在运行任何东西? 你有CMD行动设置为bash ,而不是覆盖它在你docker-compose.yml 。 我有点惊讶的容器是在一切(因为它只会运行bash和退出)。

这些文件是否完整?

另外,您可能需要重新格式化/删除Dockerfile以获得最佳做法。

你有没有看到这个论坛话题 ?

所以只需运行一个容器并调用'ifconfig'命令。 输出示例:

 bash-4.3# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:2%32738/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:508 (508.0 B) TX bytes:508 (508.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1%32738/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

那么来自example的VM的IP是172.17.0.2