我们在Docker的常见域下有几个rails应用程序,我们使用nginx将请求定向到特定应用程序.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Run Code Online (Sandbox Code Playgroud)
Config看起来像这样:
upstream foo {
server foo:3000;
}
upstream bar {
server bar:3000;
}
# and about 10 more...
server {
listen *:80 default_server;
server_name our_dev_server.com;
location /foo {
# this is specific to asset management in rails dev
rewrite ^/foo/assets(/.*)$ /assets/$1 break;
rewrite ^/foo(/.*)$ /foo/$1 break;
proxy_pass http://foo;
}
location /bar {
rewrite ^/bar/assets(/.*)$ /assets/$1 break;
rewrite ^/bar(/.*)$ /bar/$1 break;
proxy_pass http://bar;
}
# and about 10 more... …Run Code Online (Sandbox Code Playgroud) 我非常满意Docker默认给我的IP范围176.17.x.x,所以我不需要创建一个新桥,我只想给我的容器一个静态地址在这个范围内,所以我可以指向客户端浏览器直.我试过用
RUN echo "auto eth0" >> /etc/network/interfaces
RUN echo "iface eth0 inet static" >> /etc/network/interfaces
RUN echo "address 176.17.0.250" >> /etc/network/interfaces
RUN echo "netmask 255.255.0.0" >> /etc/network/interfaces
RUN ifdown eth0
RUN ifup eth0
Run Code Online (Sandbox Code Playgroud)
从Dockerfile,它正确填充interfaces文件,但接口本身没有改变.实际上,在容器中运行ifup eth0会出现此错误:
RTNETLINK答案:不允许操作无法启动eth0
我正在尝试为我的项目设置开发环境.
我有一个容器(ms1)应该放在他自己的网络中(在我的情况下是"服务"),以及一个容器(apigateway)应该访问该网络,同时将一个http端口暴露给主机的网络.
理想情况下,我的docker撰写文件看起来像这样:
version: '2'
services:
ms1:
expose:
- "13010"
networks:
services:
aliases:
- ms1
apigateway:
networks:
services:
aliases:
- api
network_mode: "host"
networks:
services:
Run Code Online (Sandbox Code Playgroud)
docker-compose不允许同时使用network_mode和网络.
我还有其他选择吗?
目前我正在使用这个:
apigateway:
networks:
services:
aliases:
- api
ports:
- "127.0.0.1:10000:13010"
Run Code Online (Sandbox Code Playgroud)
然后apigateway容器侦听0.0.0.0:13010.它工作但它很慢,如果主机的互联网连接断开,它会冻结.
另外,我计划将来在docker上使用vagrant,它是否允许以干净的方式解决?
如何修复容器的静态IP?
它说,首先我开始一个容器并进行检查
"NetworkSettings": {
"IPAddress": "XX.XX.206.98",
"IPPrefixLen": 27,
"Gateway": "XX.XX.206.105",
"Bridge": "public",
"PortMapping": null,
"Ports": {}
},
Run Code Online (Sandbox Code Playgroud)
然后我停下来,然后重启,就像
"NetworkSettings": {
"IPAddress": "XX.XX.206.99",
"IPPrefixLen": 27,
"Gateway": "XX.XX.206.105",
"Bridge": "public",
"PortMapping": null,
"Ports": {}
},
Run Code Online (Sandbox Code Playgroud)
如你所见,它改变了.我刚刚创建了一个名为public的桥,并-b=public添加了启动docker .如何为容器设置静态IP?
当我创建容器时,我想在同一个LAN中设置特定容器的IP地址.
那可能吗?
如果没有,创建后我可以编辑DHCP IP地址吗?
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca030d3cf1c2 konakart_app "/bin/sh -c '/bin/bas" 16 minutes ago Exited (1) 5 minutes ago konakart_app
08909245064b beantoast/dtkonakart_mysql "/entrypoint.sh mysql" 54 minutes ago Up 54 minutes 0.0.0.0:3300->3306/tcp konakart_db
Run Code Online (Sandbox Code Playgroud)
我正在尝试在两个不同的容器中运行konakart应用程序和它的数据库.数据库似乎工作正常,但应用程序本身似乎没有IP.当我输入时,docker inspect ca03我得到以下内容:
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
Run Code Online (Sandbox Code Playgroud)
知道如何将我的IP地址,端口8080分配给konakart_app?
我有一个环境,其中包含 3 个应用程序,2 个在 Windows 中运行,1 个在 Debian 操作系统中运行。
出于测试目的,我已经使用 VirtualBox VM(用于运行 Debian 操作系统)在仅 1 台 PC(运行 Windows 10)中构建环境。
下面是详细的网络配置:
主机 PC(使用 2 个 VirtualBox Host Only 适配器):
Ethernet adapter VirtualBox Host-Only Network:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::ec0c:3c16:4f85:1a5e%12
IPv4 Address. . . . . . . . . . . : 192.168.1.11
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . …Run Code Online (Sandbox Code Playgroud) 我试图使用Docker部署我的应用程序,并遇到一个问题,重新启动命名容器为容器分配不同的IP.也许解释我在做什么会更好地解释这个问题:
"postgres"$ PG_ID=$(docker run --name postgres postgres/image) $ APP_ID=$(docker run --link postgres:postgres webapp/image)将postgres容器映像链接到webapp容器,在webapp容器中插入一个带有postgres容器IP的hosts文件条目.这允许我在我的webapp中指向postgres db postgres:5432(我正在使用Django btw).这一切都很好,除非由于某种原因postgres崩溃.
在我手动停止postgres进程以模拟postgres进程崩溃之前,我验证了postgres容器的IP:
$ docker inspect --format "{{.NetworkSettings.IPAddress}}" $PG_ID
172.17.0.73
Run Code Online (Sandbox Code Playgroud)
现在模拟崩溃我停止postgres容器:
$ docker stop $PG_ID
Run Code Online (Sandbox Code Playgroud)
如果现在我通过使用重启postgres
$ docker start $PG_ID
Run Code Online (Sandbox Code Playgroud)
容器的ip更改:
$ docker inspect --format "{{.NetworkSettings.IPAddress}}" $PG_ID
172.17.0.74
Run Code Online (Sandbox Code Playgroud)
因此,指向webapp容器中的postgres容器的IP不再正确.我通过命名容器docker为它指定一个名称,使用特定的配置,以便您可以可靠地链接容器(网络和卷).如果IP改变,这似乎打败了目的.
如果每次postgres重新启动时我都必须重新启动我的webapp进程,这似乎没有比使用单个容器来运行这两个进程更好的了.然后我可以使用supervisor或类似的东西来保持它们都运行并用于localhost在进程之间进行链接.
我还是Docker的新手,所以我做错了什么,或者这是docker中的一个bug?
我有一个在 CentOS 服务器上运行的 NGINX,并希望通过 proxy_pass 运行在同一主机上运行的 docker 容器。
当使用 proxy_pass 和容器的 IP 时它可以工作,但是如果机器重新启动有时容器的 IP 会发生变化,并且必须手动编辑 nginx.conf 以重新指向容器的新 IP。我知道 NGINX 可以在它自己的 docker 容器内设置并链接到其他正在运行的容器,但这需要很长时间来设置和测试。
有没有办法以某种方式使用容器名称或其他不会直接在主机的 NGINX 上更改的标识符?
我希望能够将主机名添加到映射到 docker 容器的笔记本电脑 /etc/hosts 中。由于容器 ips 不是静态的,我启动/重新启动容器的每个站点都需要手动更新 /etc/hosts 文件,这不是很实用。
我正在寻找一种简单的方法来解决这个问题。我可以做某种脚本,它监听 docker 事件,检查容器 ip 并更新 /etc/hosts,但我不想重新发明轮子。(像这样:https : //github.com/discordianfish/docker-spotter)但我无法真正理解它是如何工作的。
有人有建议吗?谢谢你。
我在 Mac 上运行 Docker 时遇到了一个恼人的问题,希望得到您的帮助。问题是我公司的内部 git 存储库地址为 172.17.28.245,该 IP 地址与默认 docker 网络 IP 地址 172.17.0.0 冲突。所以每当我运行下面的命令时,我都会遇到这个问题
Ping git.xxx.net
Then I have
PING git.xxx.net (172.17.28.245) 56(84) bytes of data.
From 08be4336c264 (172.17.0.2) icmp_seq=1 Destination Host Unreachable
From 08be4336c264 (172.17.0.2) icmp_seq=2 Destination Host Unreachable
From 08be4336c264 (172.17.0.2) icmp_seq=3 Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)
那么,谁能帮我弄清楚如何在 mac 中解决这个问题?
我在 Mac 中使用 Docker QuickStart Terminal 来启动。
谢谢
我正在尝试远程调试docker中的nodejs 9.
> testnodedockerproj@0.0.0 debug /home/deb
> node --inspect=9229 ./bin/www
Debugger listening on ws://127.0.0.1:9229/75db828f-4b4b-491c-99d1-0eb60a82e45c
For help see https://nodejs.org/en/docs/inspector
Run Code Online (Sandbox Code Playgroud)
GET /robots.txt 404 1752.471 ms - 905
GET / 304 1838.729 ms - -
GET /stylesheets/style.css 304 114.501 ms - -
Run Code Online (Sandbox Code Playgroud)
但我无法连接到ws://127.0.0.1:9229/75db828f-4b4b-491c-99d1-0eb60a82e45c.
docker compose文件具有以下端口配置:
ports:
- "3100:3000"
- "9339:9229"
Run Code Online (Sandbox Code Playgroud)
我可以从docker容器内部连接到节点调试URL.但我无法从我的主机系统到达它.预期的终点应为ws://127.0.0.1:9 33 9/75db828f-4b4b-491c-99d1-0eb60a82e45c,并且无法访问.
是否有任何特定的docker配置可以连接到Web套接字?
如何到达此节点调试端点?
@Update
我已设法连接到调试端点.
node debug命令应该是:
node --inspect=[::]:9229 ./bin/www
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以连接到端口9339并连接调试器.