正如标题所说.我需要能够检索docker托管的IP地址和从主机到容器的端口映射,并在容器内部执行此操作.
我有一个运行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容器中的服务器上有Postgresql.如何从外部(即从我的本地计算机)连接到它?我应该采用什么设置才能允许?
我在Amazon RDS实例上运行Oracle 11GR2.我偶尔IO Error: Got minus one from a read call
打电话给DriverManager.getConnection(getUrl())
我,我不知道为什么.其他应用程序正常工作
为了进一步混淆事物,错误会偶尔纠正(在程序的下一次迭代之后).
我应该如何处理"从读取调用中减去一个"错误?
完整堆栈跟踪:
java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at com.cwd.facile.db.Database.<init>(Database.java:44)
at com.cwd.facile.ns.NetSuiteRequestBased.<init>(NetSuiteRequestBased.java:29)
at com.cwd.facile.ns.CommonOperations.isInventoryItem(CommonOperations.java:205)
at com.cwd.facile.ns.CommonOperations.findItemIdByName(CommonOperations.java:188)
at com.cwd.facile.ns.CommonOperations.createSalesOrder(CommonOperations.java:970)
at com.cwd.facile.Main.main(Main.java:47)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.Packet.receive(Packet.java:311)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:300)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
... 12 more
Run Code Online (Sandbox Code Playgroud)
Database.java第44行: setConn(DriverManager.getConnection(getUrl()));
其他信息:
我基于两个不同的图像创建了两个docker容器.db和另一个用于webserver.两个容器都在我的mac osx上运行.
我可以从主机访问数据库容器,同样可以从主机访问网络服务器.
但是,我如何从网络服务器访问数据库连接?
我启动db容器的方式是
docker run --name oracle-db -p 1521:1521 -p 5501:5500 oracle/database:12.1.0.2-ee
Run Code Online (Sandbox Code Playgroud)
我开始使用容器作为
docker run --name oracle-wls -p 7001:7001 wls-image:latest
Run Code Online (Sandbox Code Playgroud)
我可以通过连接访问主机上的数据库
sqlplus scott/welcome1@//localhost:1521/ORCLCDB
Run Code Online (Sandbox Code Playgroud)
我可以在主机上访问wls
http://localhost:7001/console
Run Code Online (Sandbox Code Playgroud) 在Mac和Windows上,可以在容器内使用docker.for.mac.host.internal
(替换docker.for.mac.localhost
)和docker.for.win.host.internal
(替换docker.for.win.localhost
).
是否有一个Linux将开箱即用而不传递env变量.
我的 docker-compose.yml 包含以下内容:
version: '3.2'
services:
mysql:
image: mysql:latest
container_name: mysql
restart: always
network_mode: "host"
hostname: localhost
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- $HOME/data/datasql:/var/lib/mysql
ports:
- 3306:3306
user-management-service:
build: user-management-service/
container_name: user-management-service
restart: always
depends_on:
- mysql
- rabbitmq
- eureka
network_mode: "host"
hostname: localhost
ports:
- 8089:8089
Run Code Online (Sandbox Code Playgroud)
当我尝试执行 docker-compose up 时,出现以下错误:
"host" network_mode is incompatible with port_bindings
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决问题?
我想编辑bashrc文件,以便运行一个名为"myip"的简单函数.正如您可能猜到的,函数myip只打印我机器的内部IP地址.
我工作的时候,这是脚本:
ifconfig en1 | awk '{ print $2}' | sort
Run Code Online (Sandbox Code Playgroud)
这得到了我的输出:
10.0.0.12
options=1<PERFORMNUD>
flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>
fe80::daa2:5eff:fe96:ba2f%en1
d8:a2:5e:96:ba:2f
autoselect
active
Run Code Online (Sandbox Code Playgroud)
我正在使用Mac OS X.
我怎么能这样做?
我正在努力将一个Django 1.5.x应用程序容器化,该应用程序通过ODBC连接到单独服务器上的MySQL数据库:
[mysql_default]
database = DB_NAME
driver = /usr/lib64/libmyodbc5.so
server = REMOTE_DB_SERVER
user = DB_USER
password = DB_USER_PWD
port = 3306
Run Code Online (Sandbox Code Playgroud)
我能够通过端口转发和SSH连接到远程数据库,在我的本地机器(docker之外)上运行Django应用程序:
ssh -L 3307:127.0.0.1:3306 MYID@REMOTE_DB_SERVER
Run Code Online (Sandbox Code Playgroud)
我使用Centos 6.x为应用程序设置了Docker容器,但无法使MySQL连接正常工作.容器安装了MySQL并运行了mysqld.
我的docker-compose.yml文件如下所示:
version: "2"
services:
web:
build: .
image: MY_IMAGE
container_name: MY_CONTAINER
network_mode: "host"
ports:
- "3307:3306"
command: /bin/bash
Run Code Online (Sandbox Code Playgroud)
在容器运行的情况下,我可以执行以下命令(在容器外部)以在远程数据库上显示数据库:
docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307
Run Code Online (Sandbox Code Playgroud)
但是从容器内部,同样的命令失败:
echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3306
ERROR 2003 (HY000): Can't connect to MySQL …
Run Code Online (Sandbox Code Playgroud) 我在我的localhost上运行mysql我可以通过运行来连接它:
mysql -h 127.0.0.1 -P 3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
我还用命令运行了docker container:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000 --name container container
Run Code Online (Sandbox Code Playgroud)
我想从docker容器访问我的Mysql数据库.所以我也从docker容器中输入:
mysql -h 127.0.0.1 -P 3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
但它给了我错误:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?端口似乎是正确的.
编辑1ifconfig
泊坞窗
输出:
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/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1780 errors:0 dropped:0 overruns:0 frame:0
TX packets:977 errors:0 dropped:0 overruns:0 carrier:0 …
Run Code Online (Sandbox Code Playgroud)