我需要在容器上设置调试器,这需要我设置远程(docker host)IP.在不同的教程中,我发现不同的IP地址列为可能的解决方案.在我的容器中,我运行了一个网络服务器,它向我展示了从我的主机到容器的连接来自172.19.0.1.这是在Docker for Mac版本上1.11.x.
但是,如何从Docker for Mac上的容器中看到主机IP?该IP什么时候可以更改?
编辑:https ://stackoverflow.com/a/24716645/6309的副本
我在主机上183.83.83.83
有一个docker 容器。子域mycontainer.example.com的A记录指向此IP。
卷曲183.83.83.83或mycontainer.example.com给出HTTP状态200和正确的网站。
但是,从该主机上的每个容器内部(到上述IP或主机名)相同的卷曲无法连接:
curl: (7) Failed to connect to mycontainer.example.com port 80: Host is unreachable
Run Code Online (Sandbox Code Playgroud)
从另一个主机的Docker容器或主机本身尝试此操作时,不会发生这种情况。
这是怎么了?
编辑:更多详细信息:主机运行一个Nginx代理容器,该容器将所有请求代理mycontainer.example.com到我的前端容器(通过小节点Web服务器运行React应用程序)。前端容器应该代理从mycontainer.example.com/api发出的所有API请求mycontainer.example.com:1337/api/v1。但是它不能代理API请求,因为我Host is unreachable从此主机上运行的所有容器内部收到错误。
我有我的网络应用程序在我的本地机器上运行并连接到Mysql工作台,我现在正在尝试将webapp停靠.我似乎无法连接到我的本地开发机器上的数据库(我正在运行适用于Windows的Docker Desktop),有人能告诉我如何进行此操作吗?这是我到目前为止所拥有的.
`docker run -it -e "CATALINA_OPTS=-Dspring.profiles.active=dev -DPARAM1=DEV" -p 8080:8080 -p 8005:8005 -p 8009:8009 -p 3306:3306 --add-host=docker:192.168.1.7 -v C:\myapp\trunk\target\myapp.war:/usr/local/tomcat/webapps/myapp.war --name waitapp tomcat:8.0.38-jre8`
Run Code Online (Sandbox Code Playgroud)
几秒钟后,我跑了 docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a1764dd9640 tomcat:8.0.38-jre8 "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 0.0.0.0:8005->8005/tcp, 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp waitapp
Run Code Online (Sandbox Code Playgroud)
容器似乎正在运行,但是当我尝试其余请求时,我得到404 Not not,这与使用内置tomcat服务器从spring工具套件内部运行时相同.
注意 我不想运行单独的mysql容器并通过网络链接这两个容器,我只是想尝试让我新创建的docker应用程序连接到我的本地数据库MySQL.
我刚刚尝试使用OS X上的boot2docker将应用程序移动到docker容器中.
此应用程序需要连接到主机系统上运行的mysql服务器(不在应用程序的容器或其他容器中).
现在我正在努力在"dockerized"应用程序中配置mysql主机名:到目前为止它只是连接到localhost,但这不再起作用,因为这不再指向主机mysql实际上正在运行.
作为一种快速解决方法,我已将我的工作站私有IP(在我的情况下为10.0.0.X)添加到应用程序的mysql连接配置中.
但我想知道: 是否有自动方式从docker容器中查找主机的私有IP地址?
我的设置如下: - 在 docker 中运行的 django 服务器,带有端口映射:8090:8090 - Eclipse with PyDev
我希望能够在 Pydev 上放置断点(单击一行,一步一步)
我发现了几篇文章,例如; http://www.pydev.org/manual_adv_remote_debugger.html
但它仍然无法正常工作。
1) 我应该将 manage.py 更新为“导入 pydev”吗?要添加哪些行,我是否必须在 docker 容器中复制 pydev 插件的 pysrc 才能进行模块导入?
2)是否需要端口转发?运行到 docker 中的 python 实例应该可以访问主机上的远程调试服务器吗?
3) 我找到了关于 pycharm 和使用 ssh 远程调试的文章?不能用 pydev 做类似的事情吗?
4)如何“链接”我的本地目录和docker“目录”?
[编辑]我找到了解决方案
将 eclipse/path_to\pydev\plugins\org.python.pydev\pysrc 目录复制到您的 docker 容器可以访问它的地方。
编辑 pysrc/pydevd_file_utils.py,并添加主机和 docker 容器之间的目录映射,如: PATHS_FROM_ECLIPSE_TO_PYTHON = [(r'C:/django',r'/.../lib/django'), (r'C:/ workspace/myapp',r'/var/www/myapp')] 如果您有多个包含 python 代码的路径,您可以设置多个元组
编辑 manage.py 并添加以下内容
sys.path.append('/my_path/to_pysrc_/under_docker/pysrc') import pydevd pydevd.settrace(host='172.17.42.1') #你主机的IP
在 Pydev 中,在首选项 > Pydev > 运行/调试 > 远程调试器端口:5678
在 Debug Perspective …
我正在使用docker并使用脚本运行.我想在docker中使用主机IP地址更改其中一个配置.
#!/bin/bash
IP=$(echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`)
echo Setting xwiki config IP
CONFIG=/xwiki/webapps/xwiki/WEB-INF/xwiki.cfg
sed -i -e "s/^xwiki.authentication.authhost=localhost*/xwiki.authentication.authhost= $IP/" $CONFIG
Run Code Online (Sandbox Code Playgroud)
/xwiki/start_xwiki.sh -f
我用以下命令运行我的docker.
docker run -t -i $EXPOSE_PORTS $IMAGE "$@"
Run Code Online (Sandbox Code Playgroud) 在下面的 GitHub Actions 工作流程中,我执行了一个 Gradle 构建,该构建针对 Micronaut 应用程序运行集成测试。该应用程序依赖于
security/image:0.1.15jobs:
build-test:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '15' ]
services:
tempoapp-db:
image: mariadb:10.4.15
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: foo
MYSQL_DATABASE: xoxo
MYSQL_USER: bar
MYSQL_PASSWORD: foobar
security:
image: security/image:0.1.15
env:
JAVA_TOOL_OPTIONS: "-Dcallback.url=http://<what to place here?>:8090"
credentials:
username: ${{ secrets.PACKAGES_USER }}
password: ${{ secrets.PACKAGES_TOKEN }}
ports:
- 6000:8080
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java }}
- …Run Code Online (Sandbox Code Playgroud) 我有一个docker容器,并且还在VM上安装了一个守护程序,用于在端口8125上侦听UDP.容器在此8125端口上使用UDP协议发送数据.
我试图通过启动容器来打开端口-p 8125:8125/udp,但是我收到以下错误:
Error starting userland proxy: listen udp 0.0.0.0:8125: bind: address already in use
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为守护进程已经在侦听此端口.
那么如何配置Docker以便容器可以将UDP有效负载发送到外部守护进程?