最簡單的方法是使用--link,但是更新版本的docker正在遠離它,事實上那個開關很快就會被移除。
下面的鏈接也提供了一個很好的方法,連接兩個容器。你可以跳過附加部分,因爲這只是一個很有用的如何添加項目到圖像。
https://deis.com/blog/2016/connecting-docker-containers-1/
你感興趣的部分是兩個容器之間的通信。最簡單的方法是通過Web服務器容器中的名稱引用數據庫容器。
例子:
您指定的數據庫容器DB1和Web服務器容器WEB0。容器應該都在橋接網絡上,這意味着Web容器應該能夠通過引用它的名稱連接到DB容器。
因此,如果您的應用程序具有Web配置文件,那麼對於DB主機,您將使用名稱DB1。
如果您使用的是較舊版本的docker,那麼您應該使用--link。
例子:
第1步:
那麼當您啓動Web應用程序。用途:
第2步:docker run --name web0 --link db1 webapp/webapp:3.0
和Web應用程序將被鏈接到數據庫。但是,正如我所說的 - 鏈接開關很快就會被移除。
我會使用碼頭組合,而不是,這將爲您建立一個網絡。然而;您將需要下載docker爲您的系統撰寫。 https://docs.docker.com/compose/install/#prerequisites
和示例設置是這樣的:
文件名是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: "[email protected]" HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}" db: image: postgres:9 environment: POSTGRES_USER: moodle POSTGRES_PASSWORD: "[email protected]" POSTGRES_DB: moodle HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}"
這將命名爲網絡的通用名稱,我不記得了頂我的請指出該名稱是什麼,除非使用--name開關。
IE docker-compose --name setup1 up base.yml
注:如果您使用--name開關,您將需要使用它的時候曾經叫搬運工撰寫,所以docker-compose --name setup1 down
是這樣的話,你可以有網絡服務器和數據庫的一個以上的情況下,在這種情況下,docker compose知道你想要運行命令的實例是什麼;而且你也可以有更多的一次運行。非常適合CI/CD,如果您在同一臺服務器上並行運行測試。
碼頭工人組成也有相同的命令搬運工人所以 docker-compose --name setup1 exec webserver do_some_command
最好的部分是,如果你想改變分貝的或類似的東西進行單元測試,你可以包含一個額外的.yml文件到了命令它會覆蓋任何具有相似名稱的項目,我認爲它是一個關鍵=>值替換。
例如:
db.yml
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
這將覆蓋分貝。用不同的設置。當需要從每個容器連接到這些服務時,使用服務下的名稱集,在這種情況下,使用webserver和db。
我認爲這可能實際上是一個更有用的設置在你的情況。因爲您可以在yml文件中設置所需的所有變量,並在需要啓動時爲docker撰寫命令。所以更多的啓動它,並忘記它的設置。
注意:我沒有使用--port命令,因爲公開端口對於容器 - >容器通信不是必需的。僅當您希望主機連接到容器或來自主機外的應用程序時才需要它。如果公開該端口,則該端口對主機允許的所有通信開放。因此,在端口80上公開網頁與在物理主機上啓動網絡服務器相同,並允許外部連接(如果主機允許)。另外,如果您想要一次運行多個Web應用程序,出於任何原因,然後公開端口80將會阻止您運行其他Web應用程序,如果您也試圖暴露該端口。因此,對於CI/CD,最好不要公開ports,並且如果使用docker與--name開關組合,則所有容器都將位於其自己的網絡上,因此它們不會相互衝突。所以你幾乎有一個容器的容器。
因此,Web容器和db容器都在主機上?如果是這樣,你使用哪個版本的docker?因爲Docker的老版本有一種方法,而新版本有不同的方式。你是否也能夠使用docker-compose?這將使它更容易,但我不想用你不能使用的方法給出答案。 – Caperneoignis