所以我在Docker容器中运行了一个Nginx,我在localhost上运行了一个mysql,我想从我的Nginx中连接到MySql.MySql在localhost上运行,而不是将端口暴露给外部世界,所以它绑定在localhost上,而不是绑定在机器的ip地址上.
有没有办法从这个docker容器中连接到这个MySql或localhost上的任何其他程序?
我有一个运行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容器访问端口?具体来说,我在主机上运行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) 我正在尝试设置一个停靠的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 …
随着 Docker 的出现20.10,host-gateway应该可以在 Linux 平台上使用(详见这个精彩的答案)。因此,应该可以创建一个docker-compose与平台无关的脚本。(我本人使用的是 Debian。)
以下是一些问题和答案的链接,对我到目前为止有帮助:这里,这里,和这里(以及一些其他答案和评论)
我正在尝试创建一个用于运行The Graph 的脚本,其中涉及在 Docker 容器内运行ipfs并postgres连接到 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) 我想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。如果所有地址都被接受,则该方法将返回一个空字典。
和网络配置有关吗?我应该配置任何网络设置吗?
几年来,我一直在 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) 在 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) 我在 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) 我试图运行 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) docker ×9
php ×3
linux ×2
xdebug ×2
amazon-ec2 ×1
email ×1
go ×1
localhost ×1
mongodb ×1
networking ×1
nginx ×1
phpstorm ×1
port ×1
python-3.x ×1
sendmail ×1
smtp ×1
spring-boot ×1
wsl-2 ×1