使用共享的MySQL容器

文艺青年最爱的; 尝试让WordPress Docker-compose容器与另一个docker-compose容器交谈。

在我的Mac上,我有一个WordPress和MySQL的容器,我已经build立并configuration了一个链接的MySQL服务器。 在生产中,我计划使用Google Cloud MySQL存储实例,因此计划从docker-compose文件中删除MySQL容器(取消链接),然后分离可以从多个docker容器中使用的共享容器。

我遇到的问题是,我无法将WordPress容器连接到单独的MySQL容器。 任何人都可以阐明我如何去做这件事?

我已经尝试创build一个networking失败,并尝试创build一个固定的IP,本地盒通过/ etc / hosts文件引用(我的首选configuration,因为我可以根据ENV更新文件)

WP:

version: '2' services: wordpress: container_name: spmfrontend hostname: spmfrontend domainname: spmfrontend.local image: wordpress:latest restart: always ports: - 8080:80 # creates an entry in /etc/hosts extra_hosts: - "ic-mysql.local:172.20.0.1" # Sets up the env, passwords etc environment: WORDPRESS_DB_HOST: ic-mysql.local:9306 WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: wordpress WORDPRESS_TABLE_PREFIX: spm # sets the working directory working_dir: /var/www/html # creates a link to the volume local to the file volumes: - ./wp-content:/var/www/html/wp-content # Any networks the container should be associated with networks: default: external: name: ic-network 

MySQL的:

 version: '2' services: mysql: container_name: ic-mysql hostname: ic-mysql domainname: ic-mysql.local restart: always image: mysql:5.7 ports: - 9306:3306 # Create a static IP for the container networks: ipv4_address: 172.20.0.1 # Sets up the env, passwords etc environment: MYSQL_ROOT_PASSWORD: root # TODO: Change this MYSQL_USER: root MYSQL_PASS: root MYSQL_DATABASE: wordpress # saves /var/lib/mysql to persistant volume volumes: - perstvol:/var/lib/mysql - backups:/backups # creates a volume to persist data volumes: perstvol: backups: # Any networks the container should be associated with networks: default: external: name: ic-network 

你可能想要做的是为两个容器创build一个共享的Dockernetworking,并将它们指向它。 您可以使用docker network create <name>创build一个networking。 我将在下面使用sharednet ,但是您可以使用任何你喜欢的名字。

一旦networking在那里,你可以指向两个容器。 当你使用docker-compose的时候,你可以在你的YAML文件的底部执行这个操作。 这将在文件的顶层,即一直到左边,像volumes:

 networks: default: external: name: sharednet 

要在普通容器(外部组合)上执行相同的操作,可以传递--network参数。

 docker run --network sharednet [ ... ]