我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。
我可以从主机访问db容器,也可以从主机访问webserver。
docker run --name oracle-db -p 1521:1521 -p 5501:5500 oracle/database:12.1.0.2-ee
docker run --name oracle-wls -p 7001:7001 wls-image:latest
sqlplus scott/welcome1@//localhost:1521/ORCLCDB
我可以访问主机上的wls作为
http://localhost:7001/console
最简单的方法是使用--link,但是docker的较新版本正在远离它,事实上switch很快就会被删除。
下面的链接提供了一个很好的如何连接两个容器。您可以跳过附加部分,因为这只是一个有用的如何添加项目到图像。
您感兴趣的部分是两个容器之间的通信。最简单的方法是从webserver容器中按名称引用DB容器。
示例:
您将db容器命名为DB1
,webserver容器命名为Web0
。这两个容器都应该在网桥网络上,这意味着web容器应该能够通过引用DB容器的名称来连接到DB容器。
因此,如果您有一个应用程序的web配置文件,那么对于DB主机,您将使用名称db1
。
如果您使用的是较旧版本的docker,那么您应该使用--link。
示例:
然后当您启动web应用程序时。使用:
步骤2:Docker运行--name web0--link db1 webapp/webapp:3.0
并且web应用程序将链接到数据库。但是,正如我所说的,--link开关将很快被移除。
我会用docker compose代替,它会为你建立一个网络。然而;您需要为您的系统下载docker compose。https://docs.docker.com/compose/install/#系统必备
一个示例设置如下所示:
文件名为base.yml
version: "2"
services:
webserver:
image: "moodlehq/moodle-php-apache:7.1
depends_on:
- db
volumes:
- "/var/www/html:/var/www/html"
- "/home/some_user/web/apache2_faildumps.conf:/etc/apache2/conf-enabled/apache2_faildumps.conf"
environment:
MOODLE_DOCKER_DBTYPE: pgsql
MOODLE_DOCKER_DBNAME: moodle
MOODLE_DOCKER_DBUSER: moodle
MOODLE_DOCKER_DBPASS: "m@0dl3ing"
HTTP_PROXY: "${HTTP_PROXY}"
HTTPS_PROXY: "${HTTPS_PROXY}"
NO_PROXY: "${NO_PROXY}"
db:
image: postgres:9
environment:
POSTGRES_USER: moodle
POSTGRES_PASSWORD: "m@0dl3ing"
POSTGRES_DB: moodle
HTTP_PROXY: "${HTTP_PROXY}"
HTTPS_PROXY: "${HTTPS_PROXY}"
NO_PROXY: "${NO_PROXY}"
这将为网络命名一个通用名称,我想不起这个名称是什么,除非您使用--name开关。
IEDocker-compose-name setup1 up base.yml
Docker compose也具有与Docker相同的命令,因此docker-compose-name setup1 exec webserver do_some_command
示例:
version: "2"
services:
webserver:
environment:
MOODLE_DOCKER_DBTYPE: oci
MOODLE_DOCKER_DBNAME: XE
db:
image: moodlehq/moodle-db-oracle
然后调用docker-compose-name setup1 up base.yml db.yml
这将覆盖数据库。有不同的设置。当需要从每个容器连接到这些服务时,您使用service下设置的名称,在本例中是webserver和DB。
我想这对你来说可能更有用。因为您可以在yml文件中设置所需的所有变量,并在需要它们时运行docker compose命令。所以一个更多的开始它和忘记它的设置。
注意:我没有使用--port
命令,因为Container->Container通信不需要公开端口。只有当您希望主机从主机外部连接到容器或应用程序时,才需要它。如果公开端口,则端口对主机允许的所有通信开放。因此在端口80上公开web与在物理主机上启动web服务器相同,如果主机允许,将允许外部连接。此外,如果您想同时运行多个web应用程序,无论出于何种原因,如果您尝试在该端口上公开,那么公开端口80将阻止您运行其他web应用程序。因此,对于CI/CD,最好完全不公开端口,如果使用带有--name开关的docker compose,所有容器都将在自己的网络上,这样它们就不会发生冲突。所以你会有一个容器的容器。
更新:在进一步使用特性并看到其他人如何为像Jenkins这样的CICD程序做到这一点之后。网络也是一个可行的解决方案。
docker network create test_network
示例:
docker run \
--detach \
--name db1 \
--network test_network \
-e MYSQL_ROOT_PASSWORD="${DBPASS}" \
-e MYSQL_DATABASE="${DBNAME}" \
-e MYSQL_USER="${DBUSER}" \
-e MYSQL_PASSWORD="${DBPASS}" \
--tmpfs /var/lib/mysql:rw \
mysql:5
当然,如果您有代理网络设置,您仍然应该使用“-e”或“--env-file”switch语句将这些设置传递到容器中。这样容器就可以与Internet通信了。Docker说代理设置应该被较新版本的Docker中的容器吸收;然而,我还是把它们当作一种习惯来传递。这是对正在消失的“-link”开关的替换。一旦容器连接到您创建的网络,您仍然可以使用容器的‘名称’从其他容器引用这些容器。根据上面的示例,这将是db1
。你只需要确保所有的容器都连接到同一个网络上,你就可以走了。
有关在cicd管道中使用网络的详细示例,可以参考以下链接:https://git.in.moodle.com/integration/nightlyscripts/blob/master/runner/master/run.sh
这是在Jenkins中运行的用于Moodle的大型集成测试的脚本,但是这个想法/示例可以在任何地方使用。我希望这能帮助到别人。
问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link
问题内容: 我正在尝试为将我的应用程序容器连接到postgres容器提供一个便携式解决方案。“便携式”是指我可以给用户两个命令,每个容器一个,它们将始终协同工作。 我的本地PC上运行着一个postgres docker容器,我这样运行它, 我可以使用address从python flask应用程序访问它。 我也将python应用程序也放置在docker容器中,但无法连接到postgres容器。 地
我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne
我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中- “finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172
问题内容: 目前,我在需要连接到camunda的docker容器内运行一个node.js应用程序,该容器在另一个容器中运行。 我使用以下命令启动容器 这两个应用程序现在都在运行,我可以通过在端口8000上导航到主机的IP来访问camunda,运行wget 还会返回camunda页面。使用和键入我的应用程序容器时,我无法访问camunda。相反,我得到以下错误: 当我使用将我的应用程序容器链接到ca
在页面存储Python Flask微服务中,我尝试使用主机名master-db访问MySQL数据库,但该名称无法解析。