相关疑难解决方法(0)

从Docker容器内部,如何连接到本机的本地主机?

所以我在Docker容器中运行了一个Nginx,我在localhost上运行了一个mysql,我想从我的Nginx中连接到MySql.MySql在localhost上运行,而不是将端口暴露给外部世界,所以它绑定在localhost上,而不是绑定在机器的ip地址上.

有没有办法从这个docker容器中连接到这个MySql或localhost上的任何其他程序?

reverse-proxy nginx docker docker-networking

1176
推荐指数
24
解决办法
65万
查看次数

如何从docker容器访问主机端口

我有一个运行jenkins的码头集装箱.作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器.有没有办法将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器?

编辑:我在Linux机器上本地运行docker.

更新:

除了下面的@larsks答案,要从主机获取主机IP的IP地址,我还会执行以下操作:

ip addr show docker0 | grep -Po 'inet \K[\d.]+'
Run Code Online (Sandbox Code Playgroud)

docker docker-container

217
推荐指数
13
解决办法
18万
查看次数

将主机端口转发到docker容器

是否可以让主机打开Docker容器访问端口?具体来说,我在主机上运行MongoDB和RabbitMQ,我想在Docker容器中运行一个进程来监听队列并(可选)写入数据库.

我知道我可以将一个端口从容器转发到主机(通过-p选项)并从Docker容器中连接到外部世界(即Internet),但我不希望暴露RabbitMQ和MongoDB端口从东道主到外部世界.

编辑:一些澄清:

Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT     STATE SERVICE
6311/tcp open  unknown

joelkuiper@vps20528 ~ % docker run -i -t base /bin/bash
root@f043b4b235a7:/# apt-get install nmap
root@f043b4b235a7:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway

Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT     STATE    SERVICE
6311/tcp …
Run Code Online (Sandbox Code Playgroud)

linux port networking docker

143
推荐指数
6
解决办法
11万
查看次数

从Docker容器内部使用XDebug进行远程调试不起作用

我正在尝试设置一个停靠的AMP环境,无法让远程调试器工作.我的设置如下:

我有一个运行mysql的数据库容器,它像魅力一样工作.我使用以下Dockerfile构建了一个Docker镜像'phpmysqli'

FROM php:apache

RUN docker-php-ext-install mysqli mbstring

# zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
RUN pecl install xdebug
RUN echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so' >> /usr/local/etc/php/php.ini
RUN touch /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_enable=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_autostart=0 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_connect_back=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_port=9000 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_log=/tmp/php5-xdebug.log >> /usr/local/etc/php/conf.d/xdebug.ini;

RUN echo 'date.timezone = Europe/Berlin' > /usr/local/etc/php/conf.d/date.ini
Run Code Online (Sandbox Code Playgroud)

我打电话

docker run --rm -ti  --name web -p 127.0.0.1:8080:80 -v /path/to/projects:/var/www/html --link db:db  phpmysqli
Run Code Online (Sandbox Code Playgroud)

在这个phpinfo分别php -i显示xdebug 2.3.2启动并运行之后.

接下来,我在IntelliJ IDEA中设置一个名为'Docker'的服务器,其中包含Host 127.0.0.1,Port 8080和Debugger Xdebug.我在docker …

php remote-debugging xdebug intellij-idea docker

18
推荐指数
2
解决办法
1万
查看次数

Linux 上的 docker-compose `host-gateway` 无法连接到 RPC (v20.10.1)

随着 Docker 的出现20.10host-gateway应该可以在 Linux 平台上使用(详见这个精彩的答案)。因此,应该可以创建一个docker-compose与平台无关的脚本。(我本人使用的是 Debian。)

以下是一些问题和答案的链接,对我到目前为止有帮助:这里这里,和这里(以及一些其他答案和评论)

我正在尝试创建一个用于运行The Graph 的脚本,其中涉及在 Docker 容器内运行ipfspostgres连接到 Docker 外部的区块链实例(在端口 8545 上)。这是脚本:

 version: '3'
services:
  graph-node:
    extra_hosts:
      - "host.docker.internal:host-gateway"
    image: graphprotocol/graph-node
    ports:
      - '8000:8000'
      - '8001:8001'
      - '8020:8020'
      - '8030:8030'
      - '8040:8040'
    depends_on:
      - ipfs
      - postgres
    environment:
      postgres_host: postgres
      postgres_user: graph-node
      postgres_pass: let-me-in
      postgres_db: graph-node
      ipfs: 'ipfs:5001'
      ethereum: 'localhost:http://host.docker.internal:8545'
      RUST_LOG: info
  ipfs:
    image: ipfs/go-ipfs:v0.4.23
    ports: …
Run Code Online (Sandbox Code Playgroud)

linux localhost docker docker-compose

8
推荐指数
1
解决办法
5855
查看次数

Python使用本地SMTP服务器在docker容器内发送邮件

我想smtp在python上用lib发送邮件。我知道它在端口号 25 上使用本地 smtp 服务。我有以下代码。这些代码在我的本地运行没有任何问题,邮件发送成功。但是当我将它们移动到 docker 容器时,邮件不会发送,也不会出现任何错误。

我的代码:

from_mail = 'noreply@testmail.com'
to_mail = 'to@testmail.com'

s = smtplib.SMTP('localhost')
subject = 'Test Subject'
content = 'content test'

message = f"""\
      Subject: {subject}
      To: {to_mail}
      From: {from_mail}
      {content}"""
result = s.sendmail(from_mail, to_mail, message)
s.quit()
Run Code Online (Sandbox Code Playgroud)

运行这些代码后,我得到空字典 ({}) 作为result值。在 sendmail 方法描述中有这样的:

... 消息被接受并发送到四个地址中的三个,一个被拒绝,错误代码为 550。如果所有地址都被接受,则该方法将返回一个空字典。

和网络配置有关吗?我应该配置任何网络设置吗?

email smtp sendmail python-3.x docker

6
推荐指数
1
解决办法
4813
查看次数

使用 Docker 和 WSL2 在 VSCode 中调试 PHP 时出现的问题

几年来,我一直在 Windows 中使用 VSCode + Docker,并且设法拥有一个完全正常工作的开发环境,没有任何问题。

最近我用 WSL2 设置了一个新的开发环境。将我所有的项目、库、CLI 等移动到 WSL,使用带有 WSL2 容器的 Docker Windows 和 Windows 上的 VSCode 远程连接到 WSL。一切都非常顺利,我喜欢我可以将一切分开的事实。

但是最近我遇到了一个我无法解决的问题,我失去了调试 PHP 文件的能力。我正在使用 VSCode 远程 WSL 扩展来处理 WSL 内的项目,但是当我尝试调试时,没有任何反应。

对于我使用的每个开发环境(Windows、MacOS 和 WSL),我的 VSCode 中都有树调试设置。除 WSL 外的所有工作。当我尝试使用 WSL 进行调试时,实际上什么也没发生,没有输出错误,没有调试控制台信息,什么都没有...

这是我的 VSCode 调试设置:

{
    "version": "0.2.0",
    "configurations": [{
            "name": "Listen for XDebug Win10",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "log": true,
            "externalConsole": false,
            "pathMappings": {
                "/var/www/project-a/api": "\\\\wsl$\\Ubuntu\\home\\ubuntu\\PROJECTS\\project-a\\api",
            },
            "ignore": [
                "**/vendor/**/*.php"
            ]
        },
        {
            "name": "Listen for XDebug MacOS",
            "type": "php", …
Run Code Online (Sandbox Code Playgroud)

php docker visual-studio-code vscode-debugger wsl-2

5
推荐指数
2
解决办法
4301
查看次数

java.net.UnknownHostException:host.docker.internal:AWS EC2 上的名称或服务未知

在 AWS EC2 T2.micro 实例上部署 dockerized Spring Boot 应用程序时,我遇到了“java.net.UnknownHostException:host.docker.internal:名称或服务未知”问题。由于此错误,Spring Boot 应用程序无法启动。

但奇怪的是,我没有在应用程序中的任何地方使用变量“host.docker.internal”:不在代码中,不在 yaml 文件中,不在 .env 文件中:

$ sudo grep -Rl "host.docker.internal" ~
/home/ec2-user/.bash_history
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,它只显示上一个命令来搜索它:

$ cat /home/ec2-user/.bash_history | $ cat /home/ec2-user/.bash_history | grep“主机.docker.内部”

在本地,我使用 Windows 10 进行开发,我可以使用 docker-compose 成功启动堆栈。

以下是 EC2 实例操作系统版本信息:

$ cat /etc/*release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Amazon Linux release 2 (Karoo)
Run Code Online (Sandbox Code Playgroud)

这是我在 EC2 实例上使用的 docker-compose 文件:

version: '2'
services:
  backend:
    container_name: backend
    image: 'dockerhubuser/backend:0.0.4'
    ports:
      - '8080:8080' …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 docker spring-boot docker-compose

4
推荐指数
1
解决办法
8305
查看次数

Xdebug 问题:连接到客户端超时(等待:200 毫秒)。:-(

我在 Xdebug 日志中不断收到此错误:

连接到客户端超时(等待:200 毫秒)。:-(

PhpStorm 中的调试器根本无法工作。

$ php -v
PHP 7.3.21 (cli) (built: Aug  4 2020 11:21:19) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.21, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)

我的 PHP Ini:

[xdebug]
zend_extension=".../php_xdebug-2.9.6-7.3-vc15-x86_64.dll"
xdebug.profiler_append=0
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir = ".../tmp"
xdebug.profiler_output_name = "xdebug_profile.%R::%u"
xdebug.remote_enable=On
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_mode=req
xdebug.remote_port=9001
xdebug.auto_trace=1
xdebug.collect_includes=1
xdebug.collect_params=1
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=1
xdebug.remote_log=".../logs/xdebug.log"
;xdebug.remote_connect_back=1
Run Code Online (Sandbox Code Playgroud)

登出:

==> xdebug.log <==
[17080] …
Run Code Online (Sandbox Code Playgroud)

php xdebug phpstorm

2
推荐指数
1
解决办法
8517
查看次数

查找host.docker.internal:没有这样的主机

我试图运行 sudo docker-compose up 来运行我的应用程序并连接到本地主机 mongodb 但我遇到了这个错误

time="2021-12-28T08:31:54Z" level=fatal msg="server selection error: context deadline exceeded, current topology: { Type: Unknown, Servers: [{ Addr: host.docker.internal:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp: lookup host.docker.internal: no such host }, ] }"
Run Code Online (Sandbox Code Playgroud)

最初,我尝试用 localhost 替换,host.docker.internal让 mongo uri 连接到 docker 网络,但似乎找不到它。我也在使用最新版本的 docker,所以这不是 docker 版本不受支持的问题。

docker-compose.yaml

version: '3.3'
services:
  app: 
    build: 
      context: .
      dockerfile: dockerfile
    ports: 
      - "8080:20717"
    restart: unless-stopped
    env_file: .env
    networks:
      - ext
      - int

networks: …
Run Code Online (Sandbox Code Playgroud)

go mongodb docker

1
推荐指数
1
解决办法
8371
查看次数